关于AXIS2 调用WCF的问题

问题描述

大家好,我使用AXIS2调用WCF的时候遇到了如下的错误:Exceptioninthread"main"org.apache.axis2.AxisFault:MustUnderstandcheckfailedforheaderhttp://www.w3.org/2005/08/addressing:Action我通过两种方法调用都是一样的错误,axis2的工具生成的方法以及手写的方法,手写的方法如下:packagews;importjavax.xml.namespace.QName;importorg.apache.axiom.soap.SOAP11Constants;importorg.apache.axiom.soap.SOAP12Constants;importorg.apache.axis2.AxisFault;importorg.apache.axis2.Constants;importorg.apache.axis2.addressing.AddressingConstants;importorg.apache.axis2.addressing.EndpointReference;importorg.apache.axis2.addressing.RelatesTo;importorg.apache.axis2.client.Options;importorg.apache.axis2.rpc.client.RPCServiceClient;publicclassWebServiceTest{/***@paramargs*/publicstaticvoidmain(String[]args)throwsAxisFault{Object[]opAddEntryArgs=newObject[]{"100000260032","4832"};//Stringurl="http://r2-sv0038.connecteast.local/ETollingPortal2AbstractionServiceIVR/AccountBalance.svc?wsdl";Stringurl="http://r2-sv0038.connecteast.local/ETollingPortal2AbstractionServiceIVR/AccountBalance.svc";//url="http://www.w3.org/2005/08/addressing/anonymous.";Stringmethod="GetAccountBalance1";WebServiceTest.sendService(opAddEntryArgs,url,method);}publicstaticStringsendService(Object[]opAddEntryArgs,Stringurl,Stringmethod)throwsAxisFault{Stringxml=null;RPCServiceClientserviceClient=newRPCServiceClient();//serviceClient.engageModule(newjavax.xml.namespace.QName(org.apache.axis2.Constants.MODULE_ADDRESSING));Optionsoptions=serviceClient.getOptions();//这里设置使用soap1.2,wcf用的是wshttpbinding使用的也是soap1.2貌似axis默认使用soap1.1。//否则会报Exceptioninthread"main"org.apache.axis2.AxisFault:Transporterror:415Error://Cannotprocessthemessagebecausethecontenttype'text/xml;charset=UTF-8'//wasnottheexpectedtype'application/soap+xml;charset=utf-8'.的错误options.setSoapVersionURI(SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);//EndpointReferencetargetEPR=newEndpointReference(url);options.setTo(targetEPR);options.setTimeOutInMilliSeconds((long)600000);//options.setProperty(Constants.Configuration.ENABLE_SWA,Constants.VALUE_TRUE);//在创建QName对象时,QName类的构造方法的第一个参数表示WSDL文件的命名空间名,也就是<wsdl:definitions>元素的targetNamespace属性值QNameopAddEntry=newQName("http://tempuri.org/",method);//参数,如果有多个,继续往后面增加即可,不用指定参数的名称////Object[]opAddEntryArgs=newObject[]{xmlStr};//返回参数类型,这个和axis1有点区别//invokeBlocking方法有三个参数,其中第一个参数的类型是QName对象,表示要调用的方法名;//第二个参数表示要调用的WebService方法的参数值,参数类型为Object[];//第三个参数表示WebService方法的返回值类型的Class对象,参数类型为Class[]。//当方法没有参数时,invokeBlocking方法的第二个参数值不能是null,而要使用newObject[]{}//如果被调用的WebService方法没有返回值,应使用RPCServiceClient类的invokeRobust方法,//该方法只有两个参数,它们的含义与invokeBlocking方法的前两个参数的含义相同Class[]classes=newClass[]{String.class};xml=(String)serviceClient.invokeBlocking(opAddEntry,opAddEntryArgs,classes)[0];System.out.println(xml);returnxml;}}

解决方案

解决方案二:
另外我在http://blogs.msdn.com/b/aszego/archive/2010/06/24/usernametoken-profile-vs-wcf.aspx看到这样一段话没太理解啊。。InteroperabilitywithAxisIntheactualscenarioIwrotethiscustomtokenfor,theJava-basedservicedidn’tliketheaddressingheadersthatWCFgenerated.Inparticular,thewsa:ActionheaderhadmustUnderstandsettotrue,andwegottheerrormessagethat“MustUnderstandcheckfailedforheaderhttp://www.w3.org/2005/08/addressing:Action”.WCFdoesn’tallowremovingmustUnderstandfromtheaddressingheaders(unlessyouremoveitfromtheserializedmessage).Therefore,inthesampleIsimplyaskWCFtonotaddtheaddressingheadersbysettingMessageVersiontoSoap11.
解决方案三:

解决方案四:
webservice啊webservice,不是说跨平台么你这是肿么了~~
解决方案五:

解决方案六:
我也遇到这这个错。请问你解决了嘛?
解决方案七:
引用5楼u010795216的回复:

我也遇到这这个错。请问你解决了嘛?

这之后还遇见很多问题,都忘了专门解决这个问题的办法了。最后好用的配置如下,需要在lib里添加addressing.mar的包TripPassServiceStubtpss=newTripPassServiceStub();tpss._getServiceClient().engageModule("addressing");tpss._getServiceClient().getOptions().setProperty(AddressingConstants.WS_ADDRESSING_VERSION,org.apache.axis2.addressing.AddressingConstants.Final.WSA_NAMESPACE);intsetWebServiceTimeOutInSeconds=mySession.getVariable(IProjectVariables.SET_WEB_SERVICE_TIME_OUT_IN_SECONDS).getSimpleVariable().getIntValue();tpss._getServiceClient().getOptions().setTimeOutInMilliSeconds(setWebServiceTimeOutInSeconds*1000);tpss._getServiceClient().getOptions().setProperty(HTTPConstants.REUSE_HTTP_CLIENT,true);tpss._getServiceClient().getOptions().setProperty(HTTPConstants.CHUNKED,"false");//设置不受限制.

解决方案八:
你好我也遇见了相同的问题TripPassServiceStubtpss=newTripPassServiceStub();这个是什么啊能详细说一下吗

时间: 2024-09-09 05:18:10

关于AXIS2 调用WCF的问题的相关文章

关于Axis2调用WCF WSHttpbinding的问题

问题描述 我现在在写一个Axis2调用WCFWSHttpbinding的Demo.BasicHttpbinding没有问题.关键在于我的WCFWSHttpbinding的header里面居然有RequestSecurityTokenResponse和Policy尝试用axis2/Rampart来调用,也不正确,先用STSClient(SecurityTokenService)来得到Token,然后再去提交WS访问想问几个问题1)是否WCF下WSHttpbinding默认是把RequestSecu

Axis2 调用WCF 的wshttpbinding 出现问题,谁帮忙看看万分感谢

问题描述 我用Axis2写的clint调用.netWCF开发的服务时报错,服务端本身没有问题一下是错误:log4j:WARNNoappenderscouldbefoundforlogger(org.apache.axis2.deployment.FileSystemConfigurator).log4j:WARNPleaseinitializethelog4jsystemproperly.1*********************[MessageContext:logID=urn:uuid:B

Winform 调用WCF客户端,所有服务端方法在运行的时候均找不到(编译没有问题)

  今天在开发过程中遇到了一个很恶心的问题,就是Form窗体ShowDialog的时候,直接报出下面的错误: 有关调用实时(JIT)调试而不是此对话框的详细信息, 请参见此消息的结尾. ************** 异常文本 ************** System.MissingMethodException: 找不到方法:"XXX.XXX.DataObject.SPI.DataObjectColumn[] XXX.XXX.WCFClient.WCFService.ServiceClient

ExtJS调用WCF系列

第三节:ExtJS调用WCF系列-----添加,修改,删除(2) 第三节:ExtJS调用WCF系列-----添加,修改,删除(1) 第二节:ExtJS调用WCF系列-----分页排序列表实现 第一节:ExtJS调用WCF系列-----实现JSON传递

第二节:ExtJS调用WCF系列-----分页排序列表实现

打开第一节中的那个项目,新建一个Paging.aspx的页面来实现分页列表. 这次我们使用一个测试的数据库CompanyInfoDB,里面有两张表,部门和员工,并外键关联,数据库调用采用Linq的Sqlmetal 命令方式,在Visual Studio 2008的命令提示符中输入以下命令:D:\Program Files\Microsoft Visual Studio 9.0\VC>sqlmetal /conn:server=172.16.1.52;database=CompanyInfoDB;

COM(VB/VBA/Script)利用服务标记调用WCF服务之四:使用配置文件

这几天友人同学说他在COM利用服务标记调用WCF服务的时候遇到一个问题,就是他返回的的Soap消息 大于65536这个wsHttpBinding的缺省值,引发调用错误.需要将MaxReceivedMessageSize更改成可以容纳 大消息内容的值.在我前面的三篇文章中使用的都是缺省的wsHttpBinding,所以不存在这个问题.现在 需要更改缺省值自然就需要增加配置来达到目的.目前最关键的问题就是:是否能让VB/VBA/Script来使 用配置文件呢?如果可以,那如何让VB,VBA, Scr

COM(VB/VBA/Script)利用服务标记调用WCF服务之三使用WSDL契约

前面我们介绍了使用MEX契约的服务标记在COM中调用WCF服务,这种方式是通过MEX终结点动态取得元 数据,使用起来是比较方便:但是有时服务的元数据中可能包含恶意用户可以利用的关于应用程序的敏感 信息,也就是说为了安全考虑有些服务可能不会通过MEX公布元数据信息.如果哦某些服务没有公布元数 据信息,用类型化有比较麻烦,针对这种情况我们该如何在COM中调用WCF服务呢?这时我们可以使用WSDL 契约来进行WCF服务的调用,使用这种方式和使用MEX类似,同样不需要进行类型的注册,信息都是通过动 态得

COM(VB/VBA/Script)利用服务标记调用WCF服务之二使用MEX契约

第一步:创建WCF服务 上一篇我们使用类型化契约的服务标记在COM中调用WCF服务,不过这个有一 定的局限性,因为需要注册类型,所以需要.Net FrameWork,但是在很多情况下COM客户端所在的环境没有 .Net Framework,比如说在Excel中,需要调用一个WCF服务来计算某个单元格的值,而且这个Excel文件可 能分发到许多机器上,你总不能给每台机器都装一个.Net Framework,同时都去给它注册所需的类型吧. 针对这种场景,我们可以使用MEX契约的服务标记来动态得到服务

jQuery实现ajax调用WCF服务的方法(附带demo下载)_jquery

本文实例讲述了jQuery实现ajax调用WCF服务的方法.分享给大家供大家参考,具体如下: 关于AJAX调用WCF服务分为跨域和不跨域两种方式,今天咱们先介绍下不跨域下的调用方法.DEMO是在VS2008写的. 经过测试与研究,发现AJAX调用WCF服务必须满足以下条件 1.wcf的通讯方式必须使用webHttpBinding 2.必须设置<endpointBehaviors>节点的值 3.服务的实现必须添加标记 复制代码 代码如下: [AspNetCompatibilityRequirem