import javax.xml.namespace.QName; import org.apache.axiom.om.OMAbstractFactory; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.OMFactory; import org.apache.axiom.om.OMNamespace; import org.apache.axis2.AxisFault; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; import org.apache.axis2.client.ServiceClient; import org.apache.axis2.rpc.client.RPCServiceClient; /** * axis2提供rpc和document两种style的实现。 * 在这里我们别对其验证。关于说明,请参看代码中的注释 * @author Administrator * */ public class CopyOfClient { public static void main(String[] args) { CopyOfClient client = new CopyOfClient(); //测试rpc方式 //client.testRPC(); //测试document方式 //client.testDocument(); client.testDocument1(); // client.testSubString(); } /** * 应用rpc的方式调用 * 这种方式就等于远程调用,即通过url定位告诉远程服务器,告知方法名称,参数等, * 调用远程服务,得到结果。 */ //下面这个annotaion是为了不让代码出现关于没有应用泛型的警告信息 //用elipse做编辑器的很容易理解。 @SuppressWarnings("unchecked") public void testRPC() { try { RPCServiceClient serviceClient = new RPCServiceClient(); Options options = serviceClient.getOptions(); //指定访问的web service地址 EndpointReference targetEPR = new EndpointReference( "http://localhost:8080/websServiceTest/services/HelloServiceNew"); options.setTo(targetEPR); //指定方法,注意指定命名空间 QName opPrint = new QName("http://webservice.sinosoft.com","add"); //确定参数类型和参数值 Class[] returnTypes = new Class[] { int.class }; Object obj[] = new Object[] { 1, 2 }; //得到返回结果,是一个数组 Object[] order = serviceClient.invokeBlocking(opPrint, obj, returnTypes); System.out.println(order[0]); //下面是测试each方法的。和上面类似 opPrint = new QName("http://webservice.sinosoft.com","each"); returnTypes = new Class[] { String.class }; obj = new Object[] { "zhangyt" }; order = serviceClient.invokeBlocking(opPrint, obj, returnTypes); System.out.println(order[0]); } catch (AxisFault e) { e.printStackTrace(); } } /** * 应用document方式调用 * 用ducument方式应用现对繁琐而灵活。现在用的比较多。因为真正摆脱了我们不想要的耦合 */ public void testDocument() { try { ServiceClient sc = new ServiceClient(); Options opts = new Options(); String url = "http://webservice.webxml.com.cn/WebServices/WeatherWebService.asmx"; //确定目标服务地址 opts.setTo(new EndpointReference(url)); //确定调用方法 opts.setAction("http://WebXml.com.cn/getWeatherbyCityName"); OMFactory fac = OMAbstractFactory.getOMFactory(); //指定命名空间 OMNamespace omNs = fac.createOMNamespace("http://WebXml.com.cn/", ""); //指定方法 OMElement method = fac.createOMElement("getWeatherbyCityName",omNs); //指定方法的参数 OMElement value = fac.createOMElement("theCityName",omNs); value.setText("天津"); method.addChild(value); //OMElement value1 = fac.createOMElement("value",omNs); //value1.setText("2"); //method.addChild(value1); sc.setOptions(opts); //发送请求并并得到返回结果,注意参数生成方法的分析 OMElement res = sc.sendReceive(method); System.out.println(res); //值得注意的是,返回结果就是一段由OMElement对象封装的xml字符串。 //我们可以对之灵活应用,下面我取第一个元素值,并打印之。因为调用的方法返回一个结果 // res.getFirstElement().getText(); // System.out.println(res.getFirstElement().getText()); } catch (AxisFault e) { e.printStackTrace(); } } /** * 方法二: 应用document方式调用 * 用ducument方式应用现对繁琐而灵活。现在用的比较多。因为真正摆脱了我们不想要的耦合 */ public static void testDocument1() { try { // String url = "http://localhost:8080/axis2ServerDemo/services/StockQuoteService"; String url = "http://172.24.254.192/InspectionUp/services/ServiceServerImpl?wsdl"; Options options = new Options(); // 指定调用WebService的URL EndpointReference targetEPR = new EndpointReference(url); options.setTo(targetEPR); // options.setAction("urn:getPrice"); ServiceClient sender = new ServiceClient(); sender.setOptions(options); OMFactory fac = OMAbstractFactory.getOMFactory(); String tns = "http://webservice.bjits.org"; // 命名空间,有时命名空间不增加没事,不过最好加上,因为有时有事,你懂的 OMNamespace omNs = fac.createOMNamespace(tns, ""); OMElement method = fac.createOMElement("getResourcesStatus", omNs); OMElement symbol = fac.createOMElement("type", omNs); OMElement symbols = fac.createOMElement("name", omNs); // 方法一 symbol.addChild(fac.createOMText(symbol, "http")); symbols.addChild(fac.createOMText(symbols, "webTest")); // 方法二 // method.addChild(symbol); // symbol.setText("1"); method.addChild(symbol); // // method.addChild(symbols); // symbols.setText("2"); method.addChild(symbols); method.build(); OMElement result = sender.sendReceive(method); System.out.println(result); } catch (AxisFault axisFault) { axisFault.printStackTrace(); } } /** * 方法二: 应用document方式调用 * 用ducument方式应用现对繁琐而灵活。现在用的比较多。因为真正摆脱了我们不想要的耦合 */ public static void testSubString() { try { String url = "http://localhost:8080/websServiceTest/services/HelloServiceNew?wsdl"; Options options = new Options(); // 指定调用WebService的URL EndpointReference targetEPR = new EndpointReference(url); options.setTo(targetEPR); // options.setAction("urn:getPrice"); ServiceClient sender = new ServiceClient(); sender.setOptions(options); OMFactory fac = OMAbstractFactory.getOMFactory(); String tns = "http://webservice.sinosoft.com"; // 命名空间,有时命名空间不增加没事,不过最好加上,因为有时有事,你懂的 OMNamespace omNs = fac.createOMNamespace(tns, ""); OMElement method = fac.createOMElement("add", omNs); //指定方法名 String all = "a=2&b=3";//模拟页面的 String[] split = all.split("&");//subString根据“&”截取字符窜 for(int i=0;i<split.length; i++) { // System.out.println(split[i]+"—"); //显示截取后的内容 String[] splits = split[i].split("=");// 使用=分割字符串 for(int a=0;a<splits.length -1; a++) { System.out.println(splits[0]+"="+splits[1]); //显示截取后的内容 OMElement symbol = fac.createOMElement(splits[0], omNs);//参数名称 symbol.addChild(fac.createOMText(symbol, splits[1]));//参数的值 method.addChild(symbol); } } // OMElement symbol = fac.createOMElement("a", omNs); // OMElement symbols = fac.createOMElement("b", omNs); //// 方法一 // symbol.addChild(fac.createOMText(symbol, "1")); // symbols.addChild(fac.createOMText(symbols, "2")); //// 方法二 //// method.addChild(symbol); //// symbol.setText("1"); // method.addChild(symbol); //// //// method.addChild(symbols); //// symbols.setText("2"); // method.addChild(symbols); method.build(); OMElement result = sender.sendReceive(method); System.out.println(result); } catch (AxisFault axisFault) { axisFault.printStackTrace(); } } private static OMElement OMElement(Object setText) { // TODO Auto-generated method stub return null; } }
相关推荐
本文主要介绍如何使用SOAP(Simple Object Access Protocol)方式来调用Webservice接口,以金蝶为例进行详细讲解。 首先,了解SOAP。SOAP是一种基于XML的协议,用于在Web上交换结构化的和类型化的信息。它通过HTTP...
JAVA 调用 SAP SOAP webservice 详解 在本文中,我们将详细介绍如何使用 JAVA 调用 SAP SOAP webservice,包括配置 SAP 登录信息、创建 java 项目、添加 web 服务客户端、生成 JAVA 类、调用接口等步骤。 配置 SAP...
- 调用了`HELLO_WORLD`方法,并传入了必要的输入参数。 - 捕获了可能发生的异常,并将异常信息输出。 #### 三、注意事项 - 在配置过程中,确保所有的命名都遵循SAP的命名规范。 - SOAP操作的`soapAction`值必须...
3. **调用WebService**:客户端可以通过生成的客户端代理类(通常由WSDL文件生成)来调用远程的WebService。 4. **SOAP消息**:WebService通常使用SOAP(Simple Object Access Protocol)协议传输数据,其数据格式...
这里我们关注的是如何使用POST方法调用一个WebService,并处理返回的XML响应。我们将探讨以下知识点: 1. **WebService**:WebService是一种基于HTTP协议的分布式计算模型,允许不同系统间的应用进行交互。它通常...
3. **调用服务方法**:通过生成的客户端代理类,你可以像调用本地方法一样调用WebService的方法,传递参数并接收返回值。 4. **处理结果**:接收到WebService的响应后,根据数据类型解析返回结果,如XML或JSON,再...
本主题的核心是"拼接XML调用WebService",这通常指的是通过构建XML字符串来构造请求,然后发送该请求到一个Web Service接口以获取响应。以下是对这个过程的详细解释: 1. **XML基础**:XML是一种结构化标记语言,它...
2. **编写WebService代码**:在新建的服务类(默认为`Service1.asmx.cs`)中,定义你的方法。例如,你可以创建一个名为`GetXMLData`的方法,该方法将返回一个XML字符串。你需要使用`System.Xml.Linq`库来生成XML文档...
这个类包含了调用服务所需的方法、属性和事件。 2. **身份验证机制**:在调用Java Web服务时,通常需要提供认证信息。常见的身份验证方式有基本认证(Basic Authentication)、NTLM(NT LAN Manager)认证、...
本示例中,我们将探讨如何利用C#调用WebService来获取天气预报信息。这个过程涉及到网络通信、XML数据解析以及对第三方API的集成。 首先,我们需要理解WebService的工作原理。WebService是一种基于HTTP协议的远程...
【Java 调用 .NET WebService 基础知识】 在软件开发中,跨平台交互是常见的需求,Java 和 .NET 平台之间的通信可以通过 WebService 实现。本篇将详细讲解如何使用 Java 调用 .NET 开发的 WebService。 1. **...
它允许Java方法直接映射到SOAP消息,使得开发人员能够轻松地将Java方法暴露为Web服务,或者调用远程Web服务。JAX-RPC简化了Web服务的编程模型,但已经被JAX-WS取代,后者提供了更现代、更灵活的API。 4. **JDOM**:...
在C#环境下,Windows Forms(WinForm)应用可以利用Web服务来扩展其功能,例如通过远程调用Web服务的方法获取或更新数据。本文将深入探讨如何在C# WinForm应用中实现Web服务的动态调用。 首先,让我们理解什么是Web...
Oracle 调用 WebService Oracle 调用 WebService 是指在 Oracle 数据库中调用 WebService 的过程。WebService 是一种基于 XML 的远程调用协议,能够跨越不同的平台和语言,实现不同系统之间的数据交换和业务逻辑的...
本话题聚焦于使用Delphi客户端调用由C#编写的Webservice,并接收返回的Dataset,以便进行数据库操作。以下是对这个主题的详细阐述: 首先,我们要理解Delphi和C#是两种不同的编程语言,分别来自Embarcadero ...
在C#编程中,动态调用WebService是一种高级技巧,它允许你在运行时根据需要调用不同的Web服务,而不需要在编译时就确定具体的URL或方法。这种灵活性尤其有用,当你需要处理Web服务URL变动或者需要动态选择服务时。...
4. **调用服务方法**:通过服务代理,你可以像调用本地方法一样调用Web服务的远程方法,并传递必要的参数。 ```java String result = port.someWebServiceMethod(param1, param2); ``` 5. **解析XML响应**:Web...
Java调用天气预报WebService是一个常见的任务,特别是在开发集成多种服务的应用程序时。WebService是一种基于XML标准的、平台和语言无关的通信协议,用于在不同系统间交换数据。在这个场景中,我们将探讨如何使用...