Hi all,

I am using Axis2 v1.3 and Rampart v1.3. I'm running my web service under
Tomcat. I'm using Java 1.5. I should solve this problem within 2 days so
every help is very much welcome!

 

I put my question here so you can see it easily. Explanations what I
have done you can find below.

 

Question: 

What is the right syntax for calling a web service when using rampart
and when actionmapping is empty (ie. "") in wsdl/services.xml? Do I need
some other configurations? Changing the customer's wsdl or customer's
web service is not possible. If someone would be so kind and send me a
short example of working client. Thank you!

 

 

 

So here are the things that I have done:

*********************************************** 

I created the service from the wsdl by using wsdl2java. No problems.

I created the stubs from the wsdl by using wsdl2java. No problems.

I created the client and I imported the jar file that has the stubs. No
problems.

I use TCPMon to check out the messages (messages seems to be in order).

 

When I first run the client I use the following client code (you can see
part of it):

 

************************************************************

System.err.println(" Call starts");

CFServiceStub stub = new
CFServiceStub("http://localhost:8082/axis2/services/CFService";);

//stub._getServiceClient().getOptions().setAction("");

stub._getServiceClient().getOptions().setAction("urn:uploadFile");

stub._getServiceClient().getOptions().setTimeOutInMilliSeconds(30000);

 

CFServiceStub.UploadFilein uploadFileinElement = new
CFServiceStub.UploadFilein();

CFServiceStub.UploadFileRequest uploadFileRequest = new
CFServiceStub.UploadFileRequest();

CFServiceStub.RequestHeader requestHeader = new
CFServiceStub.RequestHeader();

requestHeader.setReceiverId("RecId");

requestHeader.setRequestId("ReqId");

DataHandler dataHandlerAppReq = null;

uploadFileRequest.setApplicationRequest(dataHandlerAppReq);

uploadFileRequest.setRequestHeader(requestHeader);

uploadFileinElement.setUploadFilein(uploadFileRequest);

 

CFServiceStub.UploadFileout uploadFileOut =
stub.uploadFile(uploadFileinElement);

System.err.println(" Call ends");

************************************************************

 

The result is OK so it works and I can get the results.

Then I try to take Rampart in use. I changed my client code as follows
(paths of AXIS2_CLIENT_REPO and AXIS2_XML are valid):

 

************************************************************

System.err.println(" Call starts");

ConfigurationContext configContext =
ConfigurationContextFactory.createConfigurationContextFromFileSystem(AXI
S2_CLIENT_REPO, AXIS2_XML);

CFServiceStub stub = new CFServiceStub(configContext,
"http://localhost:8082/axis2/services/CFService";);

 

//stub._getServiceClient().getOptions().setAction("");

stub._getServiceClient().getOptions().setAction("urn:uploadFile");

stub._getServiceClient().getOptions().setTimeOutInMilliSeconds(30000);

 

CFServiceStub.UploadFilein uploadFileinElement = new
CFServiceStub.UploadFilein();

CFServiceStub.UploadFileRequest uploadFileRequest = new
CFServiceStub.UploadFileRequest();

CFServiceStub.RequestHeader requestHeader = new
CFServiceStub.RequestHeader();

requestHeader.setReceiverId("RecId");

requestHeader.setRequestId("ReqId");

DataHandler dataHandlerAppReq = null;

uploadFileRequest.setApplicationRequest(dataHandlerAppReq);

uploadFileRequest.setRequestHeader(requestHeader);

uploadFileinElement.setUploadFilein(uploadFileRequest);

 

CFServiceStub.UploadFileout uploadFileOut =
stub.uploadFile(uploadFileinElement);

System.err.println(" Call ends");

************************************************************

 

 

Now I'm getting the error: "The server did not recognise the action
which it received"

I have tried pretty much everything but I don't manage to get the client
code to work. Below you can find part of my axis2.xml and wsdl.

I can make this client code to work if I change services.xml file of my
Web service. But this is not solution because customer don't want to
change their wsdl/services.xml. It is also valid way to use "" in
actionMapping element (according to specs).

 

This is part of the services.xml with original data in it (this doesn't
work when using rampart):

 

************************************************************

<operation name="uploadFile" mep="http://www.w3.org/ns/wsdl/in-out";>

 <actionMapping>""</actionMapping>

 
<outputActionMapping>http://xxx.org/CFService/CFServicePortType/uploadFi
leResponse</outputActionMapping>

 <faultActionMapping
faultName="FileServiceFaultDetail">http://xxx.org/CFService/CFServicePor
tType/uploadFile/Fault/FServiceFaultDetail</faultActionMapping>

</operation>

 

************************************************************

 

Then I changed the services.xml a little bit and added "urn:uploadFile"
inside actionMapping element. 

This is part of the services.xml with CHANGED data in it (this works
when using rampart) This is not a solution because customer won't do
that:

 

************************************************************

<operation name="uploadFile" mep="http://www.w3.org/ns/wsdl/in-out";>

 <actionMapping>urn:uploadFile</actionMapping>

 
<outputActionMapping>http://xxx.org/CFService/CFServicePortType/uploadFi
leResponse</outputActionMapping>

 <faultActionMapping
faultName="FileServiceFaultDetail">http://xxx.org/CFService/CFServicePor
tType/uploadFile/Fault/FServiceFaultDetail</faultActionMapping>

</operation>

************************************************************

 

My axis2.xml have the following lines:

 

************************************************************

<module ref="rampart" />

<parameter name="OutflowSecurity">

     <action>

       <items>Timestamp Signature</items>

       <user>client</user>

       <signaturePropFile>client.properties</signaturePropFile>

 
<passwordCallbackClass>org.test.handlers.PWCBHandler</passwordCallbackCl
ass>

       <signatureKeyIdentifier>DirectReference</signatureKeyIdentifier>

     </action>

</parameter>

 

<parameter name="InflowSecurity">

     <action>

       <items>Timestamp Signature</items>

 <signaturePropFile>client.properties</signaturePropFile>

     </action>

</parameter>

************************************************************

 

 

 

Below you can find part of the wsdl (so you can see that soapAction=""):

 

************************************************************

<s1:operation name="uploadFile">

      <s4:operation soapAction="" style="document"/>

      <s1:input>

        <s4:body parts="uploadFilein" use="literal"/>

      </s1:input>

      <s1:output>

        <s4:body parts="uploadFileout" use="literal"/>

      </s1:output>

      <s1:fault name="FileServiceFaultDetail">

        <s4:fault name="FileServiceFaultDetail" use="literal"/>

      </s1:fault>

</s1:operation>

************************************************************

 

This is part of message taken from TCPMon:

 

************************************************************

"

...

SOAPAction: "urn:uploadFile"

...

 

<wsa:To>http://localhost:8082/axis2/services/CFService</wsa:To>

<wsa:MessageID>urn:uuid:E2EBDFDBE7B1D9743C1205310441034</wsa:MessageID>

<wsa:Action>urn:uploadFile</wsa:Action>

...

"

 

 

Thanks a lot!

 

BR,

VP

 

Reply via email to