【问题标题】:The ServiceClass object does not implement the required method in the following form: OMElement add(OMElement e)ServiceClass 对象未实现以下形式的所需方法:OMElement add(OMElement e)
【发布时间】:2017-04-17 03:05:47
【问题描述】:

我无法确定错误发生在哪里。我检查了我的Axis2.xml,并安装了最新的 Axis2 API。我目前正在使用 Apache Tomcat 8 和 JDK 1.8 进行开发。

Exception in thread "main" org.apache.axis2.AxisFault: The ServiceClass object does not implement the required method in the following form: OMElement add(OMElement e)
    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 com.test.axis2.AddOperatorStub.add(AddOperatorStub.java:181)
    at com.test.axis2.client.AddClientApp.main(AddClientApp.java:29)

【问题讨论】:

  • 也许你可以添加一些关于你做什么和你想做什么的额外信息(一些代码sn-p,这个错误发生的时间/地点等)
  • 您好,我正在尝试运行示例 Web 服务应用程序。我已经创建了服务器,并且正在使用我的客户端公开该服务以运行一个简单的方法来添加 2 个。但相反,它抛出了这个错误。我已使用此链接创建我的应用程序。 youtube.com/watch?v=lgY0pLadraE 。除了必须作为 Java 应用程序运行的最后一部分之外,我大部分都可以。
  • AddOperatorStub.add() 有问题。您是否将两个整数或一个对象传递给此方法?
  • 是的,我做到了。我终于想通了,在 Axis2.xml 中我们需要添加 w3.org/ns/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /> w3.org/ns/wsdl/in-out" class= "org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
  • 这个 sn-p 使它工作。我不确定为什么这很重要,而不是默认的 w3.org/ns/wsdl/in-only" class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/> w3.org/ns/wsdl/in-out" class="org.apache .axis2.receivers.RawXMLINOutMessageReceiver"/>.

标签: java web-services axis2


【解决方案1】:

我遇到了同样的问题

我通过如下更新 WSDL 版本解决了这个问题

http://www.w3.org/2004/08/wsdl/in-only --> http://www.w3.org/ns/wsdl/in-only

&

http://www.w3.org/2004/08/wsdl/in-out --> http://www.w3.org/ns/wsdl/in-out

示例 services.xml

之前

<service name="Axis2HelloWorld" >
    <Description>
        Please Type your service description here
    </Description>
    <messageReceivers>
        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
        <messageReceiver  mep="http://www.w3.org/2004/08/wsdl/in-out"  class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
    </messageReceivers>
    <parameter name="ServiceClass" locked="false">com.ciber.webservices.Axis2HelloWorld</parameter>
</service>

新的

<service name="Axis2HelloWorld" >
    <Description>
        Please Type your service description here
    </Description>
    <messageReceivers>
        <messageReceiver mep="http://www.w3.org/ns/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
        <messageReceiver  mep="http://www.w3.org/ns/wsdl/in-out"  class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
    </messageReceivers>
    <parameter name="ServiceClass" locked="false">com.ciber.webservices.Axis2HelloWorld</parameter>
</service>

【讨论】:

  • 那么是wsdl版本的问题吗?我无法在这里找出真正的问题
  • 作为其他答案状态,您还需要在axis2.xml文件中添加所有messageReceivers
【解决方案2】:

面临同样的问题。对 WEB-INF->services->MyService -> META-INF -> services.xml 进行以下更改

发件人:

<messageReceivers>
		<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
		<messageReceiver  mep="http://www.w3.org/2004/08/wsdl/in-out"  class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
</messageReceivers>

收件人:

<messageReceivers>
		<messageReceiver mep="http://www.w3.org/ns/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
		<messageReceiver  mep="http://www.w3.org/ns/wsdl/in-out"  class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
</messageReceivers>

【讨论】:

  • 其他答案同理
【解决方案3】:

是的,我做到了。我终于想通了,我们需要在Axis2.xml中添加

&lt;messageReceiver mep="w3.org/ns/wsdl/in-only"; class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /&gt; &lt;messageReceiver mep="w3.org/ns/wsdl/in-out"; class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /&gt;

这个 sn-p 使它工作。我不知道为什么这很重要而不是默认

&lt;messageReceiver mep="w3.org/ns/wsdl/in-only"; class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/&gt; &lt;messageReceiver mep="w3.org/ns/wsdl/in-out"; class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/&gt;

感谢大家的及时回复。确实帮助我弄清楚必须做什么。

【讨论】:

  • 我同意...在我的情况下,默认消息接收器已被注释掉,并且在 services.XML 中仅定义了 1 个专有的输入输出接收器。执行上述操作(添加默认和专有消息接收器)解决了我的问题。
猜你喜欢
  • 1970-01-01
  • 2017-10-06
  • 2012-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多