Axis Java调C# Webservice
来源:互联网 发布:股市行情数据接口 编辑:程序博客网 时间:2024/06/03 15:22
这是一个痛苦的过程,如果java对java的webservice可以说很方便,很简单,Axis,CXF等一系列框架生成客户端直接传参调用即可,但是异构语言就有点麻烦了,生成的客户端不好使。。。。。。无奈只能用Axis手动调用吧,可是,返回结果中xml的属性居然有“: @ 属性名首字母”大写这些奇奇葩葩的规则,xml很深很深,解析要命。用xml转json工具吧,由于那些奇奇葩葩的规则无法直接转,相当痛苦。。。。。。
近期,在跟某司调试接口,接口协议为webservice(很烦很烦^_^)
简单描述下环境:
我方:Java
对方:C#
首先看下对方的wsdl报文协议:
1 <s:element name="methodName"> 2 <s:complexType> 3 <s:sequence> 4 <s:element minOccurs="1" maxOccurs="1" name="CustId" type="s:int"/> 5 <s:element minOccurs="0" maxOccurs="1" name="MenuName" type="s:string"/> 6 <s:element minOccurs="0" maxOccurs="1" name="Numbers" type="s:string"/> 7 <s:element minOccurs="0" maxOccurs="1" name="ExtCode" type="s:string"/> 9 <s:element minOccurs="0" maxOccurs="1" name="mobilephone" type="s:string"/>10 </s:sequence>11 </s:complexType>12 </s:element>13 <s:element name="Method_Response">14 <s:complexType>15 <s:sequence>16 <s:element minOccurs="0" maxOccurs="1" name="Method_Result" type="s:string"/>17 <s:element minOccurs="0" maxOccurs="1" name="exceptionInfo" type="s:string"/>18 </s:sequence>19 </s:complexType>20 </s:element>
报文头:
<s:element name="Header" type="tns:Header"/><s:complexType name="Header"><s:sequence><s:element minOccurs="0" maxOccurs="1" name="UserName" type="s:string"/><s:element minOccurs="0" maxOccurs="1" name="PassWord" type="s:string"/><s:element minOccurs="1" maxOccurs="1" name="RoleId" type="s:int"/></s:sequence><s:anyAttribute/></s:complexType>
报文协议类似这样,很有个性吧,下划线,首字母大写
请求部分代码:
Service service = new Service();Call call = (Call)service.createCall();//添加接口规范字段call.addParameter(new QName(Sky400Enums.INTERFACE_PARAMS.getNameSpace(), "CustId"), XMLType.XSD_INTEGER, ParameterMode.IN);call.addParameter(new QName(Sky400Enums.INTERFACE_PARAMS.getNameSpace(), "MenuName"), XMLType.XSD_STRING, ParameterMode.IN);call.addParameter(new QName(Sky400Enums.INTERFACE_PARAMS.getNameSpace(), "Numbers"), XMLType.XSD_STRING, ParameterMode.IN);call.addParameter(new QName(Sky400Enums.INTERFACE_PARAMS.getNameSpace(), "ExtCode"), XMLType.XSD_STRING, ParameterMode.IN);call.addParameter(new QName(Sky400Enums.INTERFACE_PARAMS.getNameSpace(), "mobilephone"), XMLType.XSD_STRING, ParameterMode.IN);Object[] params = new Object[]{100010010, "/user/oop", 3, 100, 13569698990};call.setTargetEndpointAddress(new URL("http://113.221.252.3:8871/SomeWebService.asmx?wsdl"));call.setUseSOAPAction(true);//这里是targetNamespace + 方法名称call.setSOAPActionURI("htt://aabb.com" + methodName);call.setOperationName(new QName("htt://aabb.com", methodName));SOAPHeaderElement soapHeaderElement = new SOAPHeaderElement(Sky400Enums.INTERFACE_PARAMS.getNameSpace(), "Header");soapHeaderElement.setPrefix("");soapHeaderElement.setNamespaceURI("htt://aabb.com");//这里是添加SOAP头,否则接口外层校验不过try { soapHeaderElement.addChildElement("UserName").setValue("admin"); soapHeaderElement.addChildElement("PassWord").setValue("password"); soapHeaderElement.addChildElement("RoleId").setValue(1);} catch (SOAPException e) { e.printStackTrace();}call.addHeader(soapHeaderElement);call.setReturnType(XMLType.SOAP_STRING);call.setSOAPVersion(SOAPConstants.SOAP12_CONSTANTS);//开始调对方接口Object obj = call.invoke(params);MessageContext messageContext = call.getMessageContext();//请求报文Message reqMsg = messageContext.getRequestMessage();//返回报文Message repMsg = messageContext.getResponseMessage();logger.info(methodName + "请求报文:" + StringEscapeUtils.unescapeHtml(reqMsg.getSOAPPartAsString()));logger.info(methodName + "返回报文:" + obj);logger.info(methodName + "返回报文:" + StringEscapeUtils.unescapeHtml(repMsg.getSOAPPartAsString()));
接下来就是解析了,解析报文过程很痛苦,不愿再回忆,都是泪。。。。
阅读全文
0 0
- Axis Java调C# Webservice
- java调用webservice axis
- Java webservice axis
- java 中用Axis访问C#的webservice接口
- JAVA基础——调用C# Webservice(axis)
- java调用C# webservice接口使用axis报错
- axis做java的webservice
- java实现webservice axis实例
- java 通过Axis调用Webservice
- Axis 开发 java WebService 接口
- Java使用Axis调用WebService
- Java通过axis调用WebService
- Java通过axis调用WebService
- java axis 1.4访问c# webservice,并获取返回值为dataset
- C# 调用JAVA(使用axis)开发的webservice 提示错误的问题
- java(axis)调用java编写的webservice
- webservice axis
- WebService Axis
- 0819 T2 括号
- 一个自动上色网站
- POJ 1064 Cable master
- Java并发编程示例(五):线程休眠与恢复
- jvm内存模型总结
- Axis Java调C# Webservice
- Java魔法堂:深入正则表达式API
- Java并发编程示例(六):等待线程执行终止
- 【转载】自己动手打造Fiddler挖洞插件
- C++中头文件有什么作用?
- 在偷懒的路上越走越远
- VC2012/VS2012 MFC串口通讯上位机程序教程笔记
- 1-1 Class类的使用
- C++PrimerPlus 知识总结一