Search code examples
javaweb-serviceswsdljax-wsapache-axis

AxisFault: The ServiceClass object does not implement the required method in the following form: OMElement add(OMElement e)


I am trying to learn WebServices (Axis2)

I am using Jboss EAP 7.0, eclipse_mars with JDK 8, and the latest Axis2 (axis2-1.7.4).

When running the client code,

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);
    } 
}

The error that I get is:

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)

I have looked into the below posts on StackOverFlow:

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

    tried updating http://www.w3.org/2004/08/wsdl/in-only to http://www.w3.org/ns/wsdl/in-only and http://www.w3.org/2004/08/wsdl/in-out to http://www.w3.org/ns/wsdl/in-out

  2. Tried adding operation tag in the service.xml as described in the Simple axis2.xml for Axis2 embedded in webapp

  3. Also I have even ensured that the messageReceivers described in Axis2.xml and the one mentioned in service.xml are the same. I have completely run out of idea. Kindly help me if you know how to resolve this issue.

I have created the services,

package com.durgaSoft.service;

public class CalService {

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

I have used eclipse wsdl generation tool to generate WSDL. and the generated WSDL file is as shown below.

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>

ServiceXML:

<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>

Solution

  • I was also facing this problem and I solved.

    Go on this path in service file:

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

    After that change this code:

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

    to:

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

    and change this:

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

    to this:

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

    Because in axis2.xml file u are using this URL. So check and change it.