Hi Kayser,

 

You could try and register your own MessageHandler class and modify the SOAP
XML response.

 

Your custom message handle might need to extend the
org.apache.axis.handlers.BasicHandler class.

 

Use the message handler classe to add the xmlns:xsi namespace to
synchronisationPersonneResponse element.

 

I use custom MessageHandler classes for SOAP Agent clients to add SOAP
headers to the SOAP request.

 

I have not used it for a SOAP Server, I did a quick google, the following
might help.

 

www.mail-archive.com/[email protected]/msg12904.html
<http://www.mail-archive.com/[email protected]/msg12904.html> 

 

 

 

From: aaa aaa [mailto:[email protected]] 
Sent: Tuesday, 20 April 2010 2:11 AM
To: [email protected]; [email protected]
Subject: Trouble moving technical namespaces declaration from
soapenv:envelope to business part of soap messages.

 

Hello,

I'm working on integration of a webservice, running under Axis1 v1.4. It is
actually working quite fine, handling SOAP requests and responding valide
SOAP response.

I still do have trouble with a SOAP client based on Biztalk. This client
extract Business information in SOAP message and try to validate it against
the WSDL of the WS.
The problem is that, in my SOAP response, some attributes refer to the
technical namespace "xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
<http://www.w3.org/2001/XMLSchema-instance> ", which is declared in the
technical part of the message, in soapenv:Envelope. When the business
content is extracted from the technical message, the message isn't validate
against WSDL because he just don't know the "xsi" namespace that content
refer to.

Is there a way by changing server-config.wsdd or deploy.wsdd to associate
the xsi namespace to a new declaration in body part? I don't even know if
that request make sense or if I should consider things another way?!

Here is a typical message SOAP returned by the webservice and which show the
problem:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/
<http://schemas.xmlsoap.org/soap/envelope/> " 
xmlns:xsd="http://www.w3.org/2001/XMLSchema
<http://www.w3.org/2001/XMLSchema> " 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
<http://www.w3.org/2001/XMLSchema-instance> ">
   <soapenv:Body>
      <synchronisationPersonneResponse
xmlns="http://app.domain.fr/service/impl <http://acd.areva.fr/service/impl>
">
         <ns1:synchronisationPersonneReturn
xmlns:ns1="http://app.domain.fr/service/dto
<http://acd.areva.fr/service/dto> ">
            <ns1:recruteDate/>
            ...
            <ns1:postOfficeBox xsi:nil="true"/>
            <ns1:telephoneNumber xsi:nil="true"/>
            <ns1:titleLink>MISS</ns1:titleLink>
            <ns1:uid xsi:nil="true"/>
         </ns1:synchronisationPersonneReturn>
      </synchronisationPersonneResponse>
   </soapenv:Body>
</soapenv:Envelope>

In blue is the technical part of the SOAP message and in black the business
part.

I would need something like this, for instance:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/
<http://schemas.xmlsoap.org/soap/envelope/> " 
xmlns:xsd="http://www.w3.org/2001/XMLSchema
<http://www.w3.org/2001/XMLSchema> ">
   <soapenv:Body>
      <synchronisationPersonneResponse
xmlns="http://app.domain.fr/service/impl <http://acd.areva.fr/service/impl>
" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
<http://www.w3.org/2001/XMLSchema-instance> ">
         <ns1:synchronisationPersonneReturn
xmlns:ns1="http://app.domain.fr/service/dto
<http://acd.areva.fr/service/dto> ">
            <ns1:recruteDate/>
            ...
            <ns1:postOfficeBox xsi:nil="true"/>
            <ns1:telephoneNumber xsi:nil="true"/>
            <ns1:titleLink>MISS</ns1:titleLink>
            <ns1:uid xsi:nil="true"/>
         </ns1:synchronisationPersonneReturn>
      </synchronisationPersonneResponse>
   </soapenv:Body>
</soapenv:Envelope>

Lot of thanks by advance.

Greetings,

Kayser

Reply via email to