ofbiz的webservice接口提供(3)-不规范的wsdl的客户端访问代码
来源:互联网 发布:电工模拟仿真软件 编辑:程序博客网 时间:2024/06/04 19:34
针对上个模块提到的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;
- publicclass AxisClient {
- /**
- * 将我们的消息在控制台System.out打印出来
- * */
- privatestatic 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;
- }
- publicstaticvoid 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:Envelopexmlns: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>
- <findSeniorServicexmlns="http://ofbiz.apache.org/service/">
- <saltxsi:type="xsd:string">aaa</salt>
- <useridxsi:type="xsd:string">2222</userid>
- </findSeniorService>
- </SOAP-ENV:Body>
- </SOAP-ENV:Envelope>
看上边只是指定了我们要给哪个方法传送参数“<findSeniorService xmlns="http://ofbiz.apache.org/service/">”
然后发送soap的信息到webservice接口,我这里的返回值如下:
- <?xmlversion="1.0"encoding="UTF-8"?>
- <soapenv:Envelopexmlns: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:findSeniorServiceResponsexmlns:ns1="http://ofbiz.apache.org/service/">
- <aaaxsi:type="xsd:string">test_aaaaa</aaa>
- <bbbxsi:type="xsd:string">test_bbbbb</bbb>
- <cccxsi:type="xsd:string">test_ccccc</ccc>
- <useridxsi:type="xsd:string">2222</userid>
- </ns1:findSeniorServiceResponse>
- </soapenv:Body>
- </soapenv:Envelope>
这样我就验证了虽然ofbiz提供的webservice的wsdl很不好用,但是那个webservice接口还是可以使用的。只不过只是支持基础数据类型而已。
- 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)-数据类型的局限性
- OFBIZ11.04开发演示
- poj Out of hay 最小生成树 kruscal
- 蓝桥杯-试题-数字三角形-代码精简
- 关于重装系统中出现的无法找到磁盘和无法定位当前磁盘的问题
- Ubuntu 12.10下OpenSSH的离线安装方法
- ofbiz的webservice接口提供(3)-不规范的wsdl的客户端访问代码
- 如何成为一个C++高级程序员
- Visual Studio 2012使用OpenGL辅助库的问题解决方案
- “三点估算法”出题的形式演化分析
- ofbiz的webservice接口提供(4)-支持复杂数据类型方法
- ofbiz的webservice接口提供(2)-数据类型的局限性
- OJ problem 1005
- ofbiz的webservice接口提供(1)-WSDL的生成
- 【黑马程序员】File.ReadAllLines(错误)