java - Axis 故障 : The ServiceClass object does not implement the required method in the following form: OMElement add(OMElement e)

标签 java web-services wsdl jax-ws axis2

我正在尝试学习 WebServices (Axis2)

我正在使用 Jboss EAP 7.0、带有 JDK 8 的 eclipse_mars 和最新的 Axis2 (axis2-1.7.4)。

运行客户端代码时,

package com.durgasoft.service;

public class Test {
public static void main(String[] args) throws Exception{
    CalServiceStub stub = new CalServiceStub();
    //Code to invoke add()
    CalServiceStub.Add params =
    new CalServiceStub.Add();
    params.setI(13);
    params.setJ(10);
    CalServiceStub.AddResponse
    res = stub.add(params);
    int result = res.get_return();
    System.out.println(result);
    } 
}

我得到的错误是:

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.durgasoft.service.CalServiceStub.add(CalServiceStub.java:181)
    at com.durgasoft.service.Test.main(Test.java:12)

我查看了 StackOverFlow 上的以下帖子:

  1. https://stackoverflow.com/questions/35720181/the-serviceclass-object-does-not-implement-the-required-method-in-the-fowingoll

    尝试更新 http://www.w3.org/2004/08/wsdl/in-onlyhttp://www.w3.org/ns/wsdl/in-onlyhttp://www.w3.org/2004/08/wsdl/in-outhttp://www.w3.org/ns/wsdl/in-out

  2. 尝试在 service.xml 中添加操作标签,如 Simple axis2.xml for Axis2 embedded in webapp

  3. 此外,我什至确保 Axis2.xml 中描述的 messageReceivers 和 service.xml 中提到的相同。我有 完全没有想法了。如果你知道怎么做,请帮助我 解决这个问题。

我已经创建了服务,

package com.durgaSoft.service;

public class CalService {

    public int add(int i, int j){
        return i+j;
    }
}

我用过eclipse wsdl生成工具来生成WSDL。生成的WSDL文件如下图所示。

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:ns="http://service.durgaSoft.com" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ns1="http://org.apache.axis2/xsd" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" targetNamespace="http://service.durgaSoft.com">
    <wsdl:documentation>Please Type your service description here</wsdl:documentation>
    <wsdl:types>
        <xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://service.durgaSoft.com">
            <xs:element name="add">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="i" type="xs:int"/>
                        <xs:element name="j" type="xs:int"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="addResponse">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="return" type="xs:int"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:schema>
    </wsdl:types>
    <wsdl:message name="addRequest">
        <wsdl:part name="parameters" element="ns:add"/>
    </wsdl:message>
    <wsdl:message name="addResponse">
        <wsdl:part name="parameters" element="ns:addResponse"/>
    </wsdl:message>
    <wsdl:portType name="CalServicePortType">
        <wsdl:operation name="add">
            <wsdl:input message="ns:addRequest" wsaw:Action="urn:add"/>
            <wsdl:output message="ns:addResponse" wsaw:Action="urn:addResponse"/>
        </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="CalServiceSoap11Binding" type="ns:CalServicePortType">
        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
        <wsdl:operation name="add">
            <soap:operation soapAction="urn:add" style="document"/>
            <wsdl:input>
                <soap:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:binding name="CalServiceSoap12Binding" type="ns:CalServicePortType">
        <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
        <wsdl:operation name="add">
            <soap12:operation soapAction="urn:add" style="document"/>
            <wsdl:input>
                <soap12:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap12:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:binding name="CalServiceHttpBinding" type="ns:CalServicePortType">
        <http:binding verb="POST"/>
        <wsdl:operation name="add">
            <http:operation location="add"/>
            <wsdl:input>
                <mime:content type="application/xml" part="parameters"/>
            </wsdl:input>
            <wsdl:output>
                <mime:content type="application/xml" part="parameters"/>
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:service name="CalService">
        <wsdl:port name="CalServiceHttpSoap11Endpoint" binding="ns:CalServiceSoap11Binding">
            <soap:address location="http://localhost:8080/Axis2CalService/services/CalService.CalServiceHttpSoap11Endpoint/"/>
        </wsdl:port>
        <wsdl:port name="CalServiceHttpSoap12Endpoint" binding="ns:CalServiceSoap12Binding">
            <soap12:address location="http://localhost:8080/Axis2CalService/services/CalService.CalServiceHttpSoap12Endpoint/"/>
        </wsdl:port>
        <wsdl:port name="CalServiceHttpEndpoint" binding="ns:CalServiceHttpBinding">
            <http:address location="http://localhost:8080/Axis2CalService/services/CalService.CalServiceHttpEndpoint/"/>
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>

服务XML:

<service name="CalService" >
    <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>
    <!-- 
    <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.durgaSoft.service.CalService</parameter>
</service>

最佳答案

我也遇到了这个问题,我解决了。

继续服务文件中的这条路径:

WebContent--> WEB-INF--> services--> ProjectName--> META-INF--> sevices.xml

之后更改此代码:

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

因为在 axis2.xml 文件中你使用的是这个 URL。所以检查并更改它。

关于java - Axis 故障 : The ServiceClass object does not implement the required method in the following form: OMElement add(OMElement e),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43847879/

相关文章:

c# - 我将创建一个程序用条形码检查库存,我需要学习什么

java - HTTP 400 - 将参数添加到 Spring MVC Controller 时的状态

java - 为什么 DateTimeFormatter 没有以指定格式打印日期?

java - 将 java 应用程序部署到 weblogic 时出错

java - maven 编译时连接被拒绝

java - 如何找到打开外部进程窗口的 GraphicsDevice

java - 休息 : Handling matrix style and template style parameter with same name in a request

java - Webservice xsd :string in <[! CDATA[]]> 而不是转义特殊字符

web-services - 按纬度和经度定位企业(API?/Webservice?)

java - 使用 API 身份验证在 Java 中使用 SOAP 使用 Web 服务