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:
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
Tried adding operation tag in the service.xml as described in the Simple axis2.xml for Axis2 embedded in webapp
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>
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With