Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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>
like image 405
User27854 Avatar asked May 08 '17 12:05

User27854


1 Answers

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.

like image 154
KAMLESH KUMAR Avatar answered Oct 13 '22 18:10

KAMLESH KUMAR