Axis2 服务器未能识别 HTTP 头 SOAPAction 的值 的解决办法
来源:互联网 发布:c语言盗取qq号 编辑:程序博客网 时间:2024/05/21 06:50
公司的WebService服务端使用.NET生成,客户端需要使用Java来写,客户端代码如下:
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 java.rmi.RemoteException;public class Axis2Test{ public static void main(String[] args) throws RemoteException { test(); } public static void test() throws AxisFault { try { String url = "目标URL"; Options options = new Options(); EndpointReference targetEPR = new EndpointReference(url); options.setTo(targetEPR); ServiceClient sender = new ServiceClient(); sender.setOptions(options); OMFactory fac = OMAbstractFactory.getOMFactory(); String tns = "目标的TargetNameSpace"; OMNamespace omNs = fac.createOMNamespace(tns, ""); OMElement method = fac.createOMElement("调用的方法名", omNs); OMElement symbol = fac.createOMElement("参数名", omNs); symbol.addChild(fac.createOMText(symbol, "参数值")); method.addChild(symbol); method.build(); OMElement result = sender.sendReceive(method); System.out.println(result); } catch (AxisFault axisFault) { axisFault.printStackTrace(); } }}
在运行这段代码时出现了如下错误:
org.apache.axis2.AxisFault: System.Web.Services.Protocols.SoapException: 服务器未能识别 HTTP 头 SOAPAction 的值: 。 在 System.Web.Services.Protocols.Soap11ServerProtocolHelper.RouteRequest() 在 System.Web.Services.Protocols.SoapServerProtocol.RouteRequest(SoapServerMessage message) 在 System.Web.Services.Protocols.SoapServerProtocol.Initialize() 在 System.Web.Services.Protocols.ServerProtocol.SetContext(Type type, HttpContext context, HttpRequest request, HttpResponse response) 在 System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing) at org.apache.axis2.util.Utils.getInboundFaultFromMessageContext(Utils.java:508) at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:368) at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:414) at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:225) at org.apache.axis2.client.OperationClient.execute(OperationClient.java:150) at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:533) at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:509) at Axis2Test.test(Axis2Test.java:34) at Axis2Test.main(Axis2Test.java:15)
经过查找之后发现JAX-WS规范不需要SoapAction,但是.NET需要,所以产生了这个错误。
在上网查找了之后发现可以在option对象下添加一个属性:
options.setAction("目标的TargetNameSpace"+"调用的方法名");
添加后代码为:
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 java.rmi.RemoteException;public class Axis2Test{ public static void main(String[] args) throws RemoteException { test(); } public static void test() throws AxisFault { try { String url = "目标URL"; Options options = new Options(); EndpointReference targetEPR = new EndpointReference(url); options.setTo(targetEPR); options.setAction("目标的TargetNameSpace"+"调用的方法名");//需要加上这条语句 ServiceClient sender = new ServiceClient(); sender.setOptions(options); OMFactory fac = OMAbstractFactory.getOMFactory(); String tns = "目标的TargetNameSpace"; OMNamespace omNs = fac.createOMNamespace(tns, ""); OMElement method = fac.createOMElement("调用的方法名", omNs); OMElement symbol = fac.createOMElement("参数名", omNs); symbol.addChild(fac.createOMText(symbol, "参数值")); method.addChild(symbol); method.build(); OMElement result = sender.sendReceive(method); System.out.println(result); } catch (AxisFault axisFault) { axisFault.printStackTrace(); } }}
修改后信息返回成功
阅读全文
1 0
- axis2 服务器未能识别 HTTP 头 SOAPAction 的值 解决办法
- Axis2 服务器未能识别 HTTP 头 SOAPAction 的值 的解决办法
- 解决办法:服务器未能识别 HTTP 标头 SOAPAction 的值
- 解决办法:服务器未能识别 HTTP 标头 SOAPAction 的值
- 解决办法:服务器未能识别 HTTP 标头 SOAPAction 的值
- 很纠结的问题:org.apache.axis2.AxisFault: 服务器未能识别 HTTP 头 SOAPAction 的值
- 服务器未能识别 HTTP 标头 SOAPAction 的值
- 服务器未能识别 HTTP 标头 SOAPAction 的值
- webservices 服务器未能识别 HTTP 头 SOAPAction 的值
- 服务器未能识别http标头SOAPAction的值
- 服务器未能识别 HTTP 标头 SOAPAction 的值
- 服务器未能识别 HTTP 头 SOAPAction 的值
- 服务器未能识别 HTTP 头 SOAPAction 的值
- 服务器未能识别 HTTP 标头 SOAPAction 的值
- 服务器未能识别 HTTP 头 SOAPAction 的值 解决方案
- webservice 服务器未能识别 HTTP 头 SOAPAction 的值
- webservices 服务器未能识别 HTTP 头 SOAPAction 的值:.
- 服务器未能识别 HTTP 头 SOAPAction 的值
- 深度学习,机器学习面试问题
- Spring 4.2.2集成Quartz Scheduler2.2.2任务调度示例
- Android源码分析-SparseArray<E>详解
- R语言ggplot2x轴顺序设置自定义颜色
- 随机生成函数
- Axis2 服务器未能识别 HTTP 头 SOAPAction 的值 的解决办法
- Java并发之Callable和Runnable
- 文件系统管理【Ubuntu-shell】
- Android多媒体开发介绍
- Binder通信二(MediaService理解Binder机制)
- 深搜 从n个数中随机选取m个数 求出所有组合的和 模版
- 图的最短路径:Dijkstra、Bellman-Ford、SPFA、Floyd、A*算法汇总
- Python 传递任意数量实参
- 数据分析过程