问题描述
我们系统环境出了一个奇怪的问题,求大神帮忙啊问题就是我本地的环境调用目标webservice地址可以正常访问,但是生产环境调用同一个webservice地址就报如下异常:org.apache.axis2.AxisFault:ArequiredheaderrepresentingaMessageAddressingPropertyisnotpresentatorg.apache.axis2.util.Utils.getInboundFaultFromMessageContext(Utils.java:434)atorg.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:373)atorg.apache.axis2.description.OutInAxisOperationClient.execute(OutInAxisOperation.java:294)atorg.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:520)atorg.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:500)atorg.apache.axis2.rpc.client.RPCServiceClient.invokeBlocking(RPCServiceClient.java:97)atcom.servlet.PosServlet94.doPost(PosServlet94.java:468)atjavax.servlet.http.HttpServlet.service(HttpServlet.java:727)atjavax.servlet.http.HttpServlet.service(HttpServlet.java:820)atweblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)atweblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)atweblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:301)atweblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)atweblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)atcom.sinosoft.prpall.pubfun.SQLInjectFilter.doFilter(SQLInjectFilter.java:138)atweblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)atcom.pubfun.ResourceRequestFilter.doFilter(ResourceRequestFilter.java:74)atweblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)atweblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3730)atweblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3696)atweblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)atweblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)atweblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2273)atweblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2179)atweblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1490)atweblogic.work.ExecuteThread.execute(ExecuteThread.java:256)atweblogic.work.ExecuteThread.run(ExecuteThread.java:221)调用webservice代码如下:RPCServiceClientserviceClient;serviceClient=newRPCServiceClient();Optionsoptions=serviceClient.getOptions();//指定调用WebService的URLEndpointReferencetargetEPR=newEndpointReference("http://10.14.23.45:6000/cms/services/bill99Service");options.setTo(targetEPR);options.setTimeOutInMilliSeconds(1*60*1000);//设置超时时间options.setManageSession(true);options.setAction("urn:osfQuery");//指定paymentAccount方法的参数值Object[]opAddEntryArgs=newObject[]{bufSend};//指定paymentAccount方法返回值的数据类型的Class对象Class[]classes=newClass[]{String.class};//指定要调用的paymentAccount方法及WSDL文件的命名空间QNameopAddEntry=newQName("http://service.cms.aa.com","osfQuery");//调用paymentAccount方法并输出该方法的返回值returnStr=(String)serviceClient.invokeBlocking(opAddEntry,opAddEntryArgs,classes)[0];异常就出在returnStr=(String)serviceClient.invokeBlocking(opAddEntry,opAddEntryArgs,classes)[0];http://10.14.23.45:6000/cms/services/bill99Service?wsdl这个是可以正常访问的,并且可以ping通跪求大神指导啊!!!!!!!!!!!!!!!!!!!!
解决方案
解决方案二:
连一个回复的没有?大神们都还没起床呢?在线等。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
解决方案三:
需要头信息验证吧。
解决方案四:
看看xml头地址的配置,Arequiredheader,xml头通不过。
解决方案五:
引用2楼fangmingshijie的回复:
需要头信息验证吧。
求教大神怎么验证?
解决方案六:
引用3楼huasuoworld的回复:
看看xml头地址的配置,Arequiredheader,xml头通不过。
求教大神这个怎么看?关键我本地调用这个地址是没问题的啊。
解决方案七:
你可以参考下apacheCXF的配置
解决方案八:
具体怎么调用,要看服务端如何设置,调用方式和参数应该服务端提前告知你才行的。
解决方案九:
在本地可以正常访问,但是你的业务并没有测试,你用反射写的webservice出问题的几率很大,还是用IDE直接生成,你把那些生成的类文件放到你项目里。如果不愿意用IDE,非要用反射,你最好能让对方提供个demo,否则好多错误还会出现,我曾经遇到过这个问题。
解决方案十:
问题已经解决了,使用另外一种调用方式调用webservice即可,感谢大家的回复。