Hi Iksrazal,
A little work around for you.
You need to supply the wsa action to the operation {eventhough your wsdl
doesn't contain one}. For ex;
In your services.xml just put the following entry
....
<service name="SWAAutoDispatchEndpoint">
<parameter name="ServiceClass"
locked="false">com.siemens.swa.plugins.webservices.types.SWAAutoDispatchEndpointSkeleton</parameter>
<!--Mounting the method webLogin-->
<operation name="webLogin">
<messageReceiver
class="com.siemens.swa.plugins.webservices.types.SWAAutoDispatchEndpointMessageReceiver"/>
*<parameter name="wsamapping">urn:SWAAutoDispatchEndpoint</parameter>*
</operation>
</service>
....
In your stub's invoking operation add,
.....
*options.setAction("urn:SWAAutoDispatchEndpoint");*
.....
Saminda
iksrazal wrote:
I used your advice and I'm still getting "operation not found" . I'm not sure
about WEB-INF/axis2.xml - do I need to make changes there ? However, I'm
pretty sure my error is due to the client. Might someone be able to give my
client code a look?
public static void main(String[] args) {
try {
System.out.println("webLogin, firing...");
SWAAutoDispatchEndpointStub stub =
new SWAAutoDispatchEndpointStub(null,
"http://localhost:8080/axis2/services/SWAAutoDispatchEndpoint");
WebLoginElementDocument webLoginElementDocument
= WebLoginElementDocument.Factory.newInstance();
WebLoginElement webLoginElement =
WebLoginElement.Factory.newInstance();
webLoginElement.setUserNameElement("joe");
webLoginElement.setUserPasswordElement("sixpack");
webLoginElementDocument.setWebLoginElement(webLoginElement);
stub.webLogin(webLoginElementDocument);
} catch (AxisFault axisFault) {
axisFault.printStackTrace();
} catch (Exception ex) {
ex.printStackTrace();
}
}
The endpoint "http://localhost:8080/axis2/services/SWAAutoDispatchEndpoint" is
what shows correctly on the happy axis page.
My aar file is:
SWAAutoDispatchEndpoint.aar
My services.xml file is:
<!--Auto generated Axis Service XML-->
<service name="SWAAutoDispatchEndpoint">
<parameter name="ServiceClass"
locked="false">com.siemens.swa.plugins.webservices.types.SWAAutoDispatchEndpointSkeleton</parameter>
<!--Mounting the method webLogin-->
<operation name="webLogin">
<messageReceiver
class="com.siemens.swa.plugins.webservices.types.SWAAutoDispatchEndpointMessageReceiver"/>
</operation>
</service>
WSDL file is:
<?xml version="1.0" encoding="UTF-8"?>
<definitions name="SWAAutoDispatchService"
targetNamespace="http://swaAutoDispatch" xmlns:tns="http://swaAutoDispatch"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:ns2="http://swaAutoDispatch/types">
<types>
<schema targetNamespace="http://swaAutoDispatch/types"
xmlns:tns="http://swaAutoDispatch/types"
xmlns:soap11-enc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns="http://www.w3.org/2001/XMLSchema">
<import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
<complexType name="ReturnWebBase">
<sequence>
<element name="errorMessage" type="string"/>
<element name="successErrorCode"
type="int"/></sequence></complexType>
<complexType name="ReturnWebLogin">
<complexContent>
<extension base="tns:ReturnWebBase">
<sequence>
<element name="SOAP_Session_id" type="string"/>
<element name="web_user_name"
type="string"/></sequence></extension></complexContent></complexType>
<element name="webLoginElement">
<complexType>
<sequence>
<element ref="tns:user_nameElement"/>
<element ref="tns:user_passwordElement"/>
</sequence>
</complexType>
</element>
<element name="user_nameElement" type="xsd:string"/>
<element name="user_passwordElement" type="xsd:string"/>
<element name="ReturnWebLoginElement" type="ns2:ReturnWebLogin"/>
<element name="ReturnWebBaseElement" type="ns2:ReturnWebBase"/>
</schema></types>
<message name="SWAAutoDispatchEndpoint_webLogin">
<part name="parameters" element="ns2:webLoginElement"/>
</message>
<message name="SWAAutoDispatchEndpoint_webLoginResponse">
<part name="result" element="ns2:ReturnWebLoginElement"/>
</message>
<portType name="SWAAutoDispatchEndpoint">
<operation name="webLogin">
<input message="tns:SWAAutoDispatchEndpoint_webLogin"
name="SWAAutoDispatchEndpoint_webLogin"/>
<output message="tns:SWAAutoDispatchEndpoint_webLoginResponse"
name="SWAAutoDispatchEndpoint_webLoginResponse"/>
</operation>
</portType>
<binding name="SWAAutoDispatchEndpointBinding"
type="tns:SWAAutoDispatchEndpoint">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"
style="document"/>
<operation name="webLogin">
<soap:operation soapAction=""/>
<input name="SWAAutoDispatchEndpoint_webLogin">
<soap:body use="literal"/>
</input>
<output name="SWAAutoDispatchEndpoint_webLoginResponse">
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="SWAAutoDispatchService">
<port name="SWAAutoDispatchEndpointPort"
binding="tns:SWAAutoDispatchEndpointBinding">
<soap:address
location="http://localhost:8080/axis2/services/SWAAutoDispatchEndpoint"/></port></service></definitions>
Cheers,
iksrazal
Em Terça 29 Novembro 2005 18:30, o Dong Liu escreveu:
Hi,
I guess the endpoint reference in your case should be the one in your
services.xml, i.e.
http://localhost:8080/axis2/services/SWAAutoDispatchEndpoint
To ensure the service works, my practice is to name the .aar package
the same as the service name in your services.xml and test the
endpoint without putting wsdl file in the package. Actually, I suspect
that axis 2 works independently with the wsdl's associated to
services.
Cheers,
Don
On 11/29/05, iksrazal <[EMAIL PROTECTED]> wrote:
I've got a similar problem and what you describe doesn't match the
services.xml file produced by WSDL2Java .
This is my file produced by WSDL2Java :
<!--Auto generated Axis Service XML-->
<service name="SWAAutoDispatchEndpoint">
<parameter name="ServiceClass"
locked="false">com.siemens.swa.plugins.webservices.types.SWAAutoDispatchE
ndpointSkeleton</parameter> <!--Mounting the method webLogin-->
<operation name="webLogin">
<messageReceiver
class="com.siemens.swa.plugins.webservices.types.SWAAutoDispatchEndpointM
essageReceiver"/> </operation>
</service>
Here's my the relevant wsdl section, with full wsdl below:
<service name="SWAAutoDispatchService">
<port name="SWAAutoDispatchEndpointPort"
binding="tns:SWAAutoDispatchEndpointBinding">
<soap:address
location="http://localhost:8080/axis2/services/SWAAutoDispatchEndpoint"/>
</port></service>
Should I file a jira issue? This is confusing.
Incidently, I'm seeing this EPR on the listServices.jsp - after making
the change to services.xml to be: 'service name="SWAAutoDispatchService'
"Available services
SWAAutoDispatchService
Service EPR : http://localhost:8080/axis2/services/SWAAutoDispatchService
Service Description : null
Available operations
* webLogin "
Yet I'm getting:
[java] webLogin, firing...
[java] org.apache.axis2.AxisFault: org.apache.axis2.AxisFault:
Operation Not found EPR is
http://localhost:8080/axis2/services/SWAAutoDispatchService and WSA
Action =
[java] at
org.apache.axis2.engine.DispatchingChecker.invoke(DispatchingChecker.java
:70)
Here's my client code - I'm kind of stuck:
package com.siemens.swa.plugins.clients;
import org.apache.axis2.AxisFault;
import
com.siemens.swa.plugins.webservices.types.SWAAutoDispatchEndpointStub;
import
com.siemens.swa.plugins.webservices.types.databinding.swaAutoDispatch.Web
LoginElementDocument; import
com.siemens.swa.plugins.webservices.types.databinding.swaAutoDispatch.Web
LoginElementDocument.WebLoginElement;
/**
* Login.
*
*/
public class WiseLogin {
public static void main(String[] args) {
try {
System.out.println("webLogin, firing...");
SWAAutoDispatchEndpointStub stub =
new SWAAutoDispatchEndpointStub(null,
"
http://localhost:8080/axis2/services/SWAAutoDispatchService");
WebLoginElementDocument webLoginElementDocument
= WebLoginElementDocument.Factory.newInstance();
WebLoginElement webLoginElement =
WebLoginElement.Factory.newInstance();
webLoginElement.setUserNameElement("joe");
webLoginElement.setUserPasswordElement("sixpack");
webLoginElementDocument.setWebLoginElement(webLoginElement);
stub.webLogin(webLoginElementDocument);
System.out.println("dispatch, completed!!!");
} catch (AxisFault axisFault) {
axisFault.printStackTrace();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
iksrazal
<?xml version="1.0" encoding="UTF-8"?>
<definitions name="SWAAutoDispatchService"
targetNamespace="http://swaAutoDispatch"
xmlns:tns="http://swaAutoDispatch"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:ns2="http://swaAutoDispatch/types">
<types>
<schema targetNamespace="http://swaAutoDispatch/types"
xmlns:tns="http://swaAutoDispatch/types"
xmlns:soap11-enc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns="http://www.w3.org/2001/XMLSchema">
<import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
<complexType name="ReturnWebBase">
<sequence>
<element name="errorMessage" type="string"/>
<element name="successErrorCode"
type="int"/></sequence></complexType>
<complexType name="ReturnWebLogin">
<complexContent>
<extension base="tns:ReturnWebBase">
<sequence>
<element name="SOAP_Session_id" type="string"/>
<element name="web_user_name"
type="string"/></sequence></extension></complexContent></complexType>
<element name="webLoginElement">
<complexType>
<sequence>
<element ref="tns:user_nameElement"/>
<element ref="tns:user_passwordElement"/>
</sequence>
</complexType>
</element>
<element name="user_nameElement" type="xsd:string"/>
<element name="user_passwordElement" type="xsd:string"/>
<element name="ReturnWebLoginElement" type="ns2:ReturnWebLogin"/>
<element name="ReturnWebBaseElement" type="ns2:ReturnWebBase"/>
</schema></types>
<message name="SWAAutoDispatchEndpoint_webLogin">
<part name="parameters" element="ns2:webLoginElement"/>
</message>
<message name="SWAAutoDispatchEndpoint_webLoginResponse">
<part name="result" element="ns2:ReturnWebLoginElement"/>
</message>
<portType name="SWAAutoDispatchEndpoint">
<operation name="webLogin">
<input message="tns:SWAAutoDispatchEndpoint_webLogin"
name="SWAAutoDispatchEndpoint_webLogin"/>
<output message="tns:SWAAutoDispatchEndpoint_webLoginResponse"
name="SWAAutoDispatchEndpoint_webLoginResponse"/>
</operation>
</portType>
<binding name="SWAAutoDispatchEndpointBinding"
type="tns:SWAAutoDispatchEndpoint">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"
style="document"/>
<operation name="webLogin">
<soap:operation soapAction=""/>
<input name="SWAAutoDispatchEndpoint_webLogin">
<soap:body use="literal"/>
</input>
<output name="SWAAutoDispatchEndpoint_webLoginResponse">
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="SWAAutoDispatchService">
<port name="SWAAutoDispatchEndpointPort"
binding="tns:SWAAutoDispatchEndpointBinding">
<soap:address
location="http://localhost:8080/axis2/services/SWAAutoDispatchEndpoint"/>
</port></service></definitions>
Em Terça 29 Novembro 2005 01:57, o Deepal Jayasinghe escreveu:
Hi Dong;
I will tell you what actually happen inside
1. If the service archive file contains a services.xml with its root
tag being <serviceGroup></serviceGroup> , then the name of the
service group will be the name of the archive file name (if the archive
name foo.aar then the group name will be foo).
2. If the services.xml is for a service group , then all the children
service elements must have a name , simply in <service
name="someName"> tag the name attribute can not be null , as well as
that should be unique across the system
3. If the service archive file contains a service.xml with root
element being <service> </service> then the name of the service will be
the name of the archive file , even if there is a name attribute that
will be ignored.
4. IF you have a WSDL file for a service then that wsdl file should
contain a <service> element and then name of the service element should
equal to the name of the service that refers , as an example if you
have a <service name="fooService"> in services.xml then there should be
service element in wsdl file as follow
<wsdl:service name="fooService">
<wsdl:port binding="impl:fooServiceBinding" name="fooService">
<wsdlsoap:address
location="http://localhost:8080/axis/services/fooService" />
</wsdl:port>
</wsdl:service>
5. It should note that the name of the wsdl file really does not matter
if you have the right service element in the wsdl file , if your
archive file is for a service group you can put any number of wsdl
files in META-INF directory with right references.
Thanks,
Deepal
................................................................
~Future is Open~
----- Original Message -----
From: "Dong Liu" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Tuesday, November 29, 2005 6:17 AM
Subject: [axis2]Questions on service name
Hi, developers,
On axis 2, three files are related to a service: the services.xml, the
.wsdl file, and the deployment package .aar file. I found there would
be multiple services appearing on the listServices page if the name of
the .aar package, the service name in wsdl file and that in
services.xml are different. And there would be conflicting endpoint
references for the same service. Is naming the service names in the
three places the only way to avoid such conflict?
Cheers,
Don