ofbiz的webservice接口提供(3)-不规范的wsdl的客户端访问代码
来源:互联网 发布:软件需求管理 编辑:程序博客网 时间:2024/06/05 10:27
针对上个模块提到的ofbiz的wsdl确实不是很规范,那么我们使用axis客户端工具生成的代码肯定不可用,这里我提供了我的客户端调用代码:
- import java.util.*;
- import java.net.*;
- import java.rmi.*;
- import javax.xml.namespace.*;
- import javax.xml.rpc.*;
- import org.apache.axis.Message;
- import org.apache.axis.message.RPCElement;
- import org.apache.axis.message.RPCParam;
- import org.apache.axis.message.SOAPEnvelope;
- import org.apache.axis.client.Call;
- import org.apache.axis.client.Service;
- public class AxisClient {
- /**
- * 将我们的消息在控制台System.out打印出来
- * */
- private static Map getResponseParams(Message respMessage) {
- Map mRet = new Hashtable();
- try {
- SOAPEnvelope resEnv = respMessage.getSOAPEnvelope();
- List bodies = resEnv.getBodyElements();
- Iterator i = bodies.iterator();
- while (i.hasNext()) {
- Object o = i.next();
- if (o instanceof RPCElement) {
- RPCElement body = (RPCElement) o;
- List params = null;
- params = body.getParams();
- Iterator p = params.iterator();
- while (p.hasNext()) {
- RPCParam param = (RPCParam) p.next();
- mRet.put(param.getName(), param.getValue());
- System.out.println("SOAP Client Param - " + param.getName() + "=" + param.getValue());
- }
- }
- }
- } catch (org.apache.axis.AxisFault e) {
- System.out.println("AxisFault");
- } catch (org.xml.sax.SAXException e) {
- System.out.println("SAXException");
- }
- return mRet;
- }
- public static void main(String[] args) {
- String message = "";
- Map output;
- String endpoint;
- try {
- //指明我们的服务点
- endpoint = "http://192.168.20.32/projectname/control/SOAPService/";
- Call call = (Call) new Service().createCall();
- call.setTargetEndpointAddress(new URL(endpoint));
- //指明要调用的服务名称
- call.setOperationName(new QName("findSeniorService", "findSeniorService"));
- //指明服务的输出输出参数
- call.addParameter("userid",
- org.apache.axis.Constants.XSD_STRING,
- javax.xml.rpc.ParameterMode.INOUT);
- call.addParameter("salt",
- org.apache.axis.Constants.XSD_STRING,
- javax.xml.rpc.ParameterMode.IN);
- call.addParameter("aaa",
- org.apache.axis.Constants.XSD_STRING,
- javax.xml.rpc.ParameterMode.OUT);
- call.addParameter("bbb",
- org.apache.axis.Constants.XSD_STRING,
- javax.xml.rpc.ParameterMode.OUT);
- call.addParameter("ccc",
- org.apache.axis.Constants.XSD_STRING,
- javax.xml.rpc.ParameterMode.OUT);
- call.setReturnType(org.apache.axis.Constants.XSD_STRING);
- //传递参数,发起调用
- Object responseWS = call.invoke(new Object[]{"123456789", "aaa"});
- System.out.println( "Receiving response: " + (String) responseWS);
- output = call.getOutputParams();
- getResponseParams(call.getMessageContext().getResponseMessage());
- } catch (MalformedURLException ex) {
- message = "error: wrong url";
- } catch (ServiceException ex) {
- message = "error: failed to create the call";
- } catch (RemoteException ex) {
- ex.printStackTrace();
- message = "error: failed to invoke WS";
- } finally {
- System.out.println("");
- System.out.println(message);
- }
- }
- }
注意上边的endpoint的链接要根据你服务器部署的实际情况来书写。
同时我也提供下xmlspy根据链接生成的数据包,这个不可用:
- <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <SOAP-ENV:Body>
- <salt xsi:type="xsd:string">String</salt>
- <userid xsi:type="xsd:string">String</userid>
- </SOAP-ENV:Body>
- </SOAP-ENV:Envelope>
看到上边那个生成的不可用的文件主要是没指定服务方法,我们手工改一下,并将我们的参数值奉上:
- <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <SOAP-ENV:Body>
- <findSeniorService xmlns="http://ofbiz.apache.org/service/">
- <salt xsi:type="xsd:string">aaa</salt>
- <userid xsi:type="xsd:string">2222</userid>
- </findSeniorService>
- </SOAP-ENV:Body>
- </SOAP-ENV:Envelope>
看上边只是指定了我们要给哪个方法传送参数“<findSeniorService xmlns="http://ofbiz.apache.org/service/">”
然后发送soap的信息到webservice接口,我这里的返回值如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <soapenv:Body>
- <ns1:findSeniorServiceResponse xmlns:ns1="http://ofbiz.apache.org/service/">
- <aaa xsi:type="xsd:string">test_aaaaa</aaa>
- <bbb xsi:type="xsd:string">test_bbbbb</bbb>
- <ccc xsi:type="xsd:string">test_ccccc</ccc>
- <userid xsi:type="xsd:string">2222</userid>
- </ns1:findSeniorServiceResponse>
- </soapenv:Body>
- </soapenv:Envelope>
这样我就验证了虽然ofbiz提供的webservice的wsdl很不好用,但是那个webservice接口还是可以使用的。只不过只是支持基础数据类型而已。
0 0
- ofbiz的webservice接口提供(3)-不规范的wsdl的客户端访问代码
- ofbiz的webservice接口提供(3)-不规范的wsdl的客户端访问代码
- ofbiz的webservice接口提供(3)-不规范的wsdl的客户端访问代码
- ofbiz的webservice接口提供(3)-不规范的wsdl的客户端访问代码
- 转 ofbiz的webservice接口提供(3)-不规范的wsdl的客户端访问代码
- ofbiz的webservice接口提供(3)-不规范的wsdl的客户端访问代码
- ofbiz的webservice接口提供(3)-不规范的wsdl的客户端访问代码
- ofbiz的webservice接口提供(3)-不规范的wsdl的客户端访问代码
- ofbiz的webservice接口提供(3)-wsdl文件的不规范性
- ofbiz的webservice接口提供(1)-WSDL的生成
- ofbiz的webservice接口提供(1)-WSDL的生成
- ofbiz的webservice接口提供(1)-WSDL的生成
- ofbiz的webservice接口提供(1)-WSDL的生成
- ofbiz的webservice接口提供(1)-WSDL的生成
- ofbiz的webservice接口提供(1)-WSDL的生成
- ofbiz的webservice接口提供(1)-WSDL的生成
- 转 ofbiz的webservice接口提供(1)-WSDL的生成
- ofbiz的webservice接口提供(2)-数据类型的局限性
- ofbiz的webservice接口提供(2)-数据类型的局限性
- Win7下用C#开发windows服务
- Dede基础
- swift基础篇:视图控制器UIViewControler
- sql server查看表空间
- ofbiz的webservice接口提供(3)-不规范的wsdl的客户端访问代码
- apache添加域名绑定
- UIAPPlicationMain() 函数详解 (一个应用程序的启动过程)
- ofbiz的webservice接口提供(4)-支持复杂数据类型方法
- Eclipse中Maven+Spring3.2.8+SpringMVC HelloWorld项目
- DirectX11 顶点着色器示例
- 如何设置ofbiz的日志输出级别
- javascript Backbone框架学习
- ofbiz权限判断语法整理