I found a problem when accessing header.
Context : webservices exposed dynamicaly (WSDL and implementation).
In order to define which service is in the scope of a received request, I need to access an Header.
I access the header when Axis calls my own instance of EngineConfiguration.getService(QName name).
I use Message.getSOAPEnvelope().getHeaderByName(...) I noticed that calling getSOAPEnvelope launches the full message deserialization. The body is also deserialized.
In case of WRAPPED/LITERAL this is a problem. The metadata (mainly types of the service operations) used to create the service ServiceDesc
are not known when this deserialization occurs. Axis is deserializing the literal values in "best effort" (String for simple types, ...)
I perhaps access the header in the wrong place. This could sound strange but I need to access the header in order to findout what is the service.
I found a way to do it but it smells the hack... I create a new Message from the received one. Call getSOAPEnvelope() on the newly created one.
The deserialization is done twice...
Message msg = msgContext.getRequestMessage(); Message msg2 = new Message(msg.getSOAPPartAsString()); SOAPEnvelope env = msg2.getSOAPEnvelope();
Regards.
--
----------------------------------------------------------------------
Jean-Francois Denise Sun Microsystems
Sun ONE/Java Web Services
email: [EMAIL PROTECTED] Internal home page : http://icncweb.france/~jfdenise
-------------------------------------------------------------------
