You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@axis.apache.org by Matt Magoffin <ap...@msqr.us> on 2006/05/18 02:52:19 UTC

soap:header element shows up in soap Header _and_ Body

Hello, I am trying to work with a WSDL that requires a header element, and
am having trouble getting Axis 1.4 to correctly generate the SOAP message.
I've generated Axis classes from the WSDL. The best I've been able to do
is get the header element to show up correctly in the SOAP header, but
then it also shows up as the body element, with the expected body element
as a child, like this (XML truncated as to simplify):

<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" ...
  <soapenv:Header>
    <ns1:payloadManifest
xmlns:ns1="http://www.starstandards.org/webservices/...
      <manifest element="ProcessSalesLead" id="Content0" namespaceURI="...
    </ns1:payloadManifest>
  </soapenv:Header>
  <soapenv:Body>
    <payloadManifest
xmlns="http://www.starstandards.org/webservices/2003/12/transport">
      <ProcessMessage/>
    </payloadManifest>
  </soapenv:Body>
</soapenv:Envelope>

Here the <ns1:payloadManifest> element is as expected in the
<soapenv:Header> but the expected element in <soapenv:Body> is the
<ProcessMessage/> element, not another <payloadManifest> element.

The relevant WSDL I have is arranged as such:

	<message name="ProcessMessageIn">
		<part name="processMessage" element="starws:ProcessMessage"/>
		<part name="requestHeader" element="starws:payloadManifest"/>
	</message>

	<message name="ProcessMessageOut">
		<part name="processMessageResponse"
element="starws:ProcessMessageResponse"/>
		<part name="responeHeader" element="starws:payloadManifest"/>
	</message>

	<portType name="StarTransportPortTypes">
		<operation name="ProcessMessage">
			<input message="tns:ProcessMessageIn"/>
			<output message="tns:ProcessMessageOut"/>
		</operation>
	</portType>

	<binding name="StarTransport" type="tns:StarTransportPortTypes">
		<soap:binding transport="http://schemas.xmlsoap.org/soap/http"
			style="document"/>
		<operation name="ProcessMessage">
			<soap:operation
				soapAction="http://www.starstandards.org/.../ProcessMessage"
				style="document"/>
			<input>
				<soap:header message="tns:ManifestHeader"
					part="requestHeader" use="literal"/>
				<soap:body use="literal"/>
			</input>
			<output>
				<soap:header message="tns:ManifestHeader"
					part="responseHeader" use="literal"/>
				<soap:body use="literal"/>
			</output>
		</operation>
	</binding>

Anything look fishy here? I'm at a loss at this point... I've attached the
full WSDL for reference.

-- m@

Re: soap:header element shows up in soap Header _and_ Body

Posted by Matt Magoffin <ap...@msqr.us>.
Thanks for your reply, Anne, however it does not seem to make any
difference. I have attached my updated WSDL, from which I regenerated the
Axis classes and re-deployed the service, but I'm getting the exact same
SOAP message as before.

I wondered if perhaps the soap:header message should be capitalized to
tns:ProcessMessageIn, but that did not help, either.

Any other thoughts?

> Matt,
>
> A few mistakes in your WSDL:
>
> You must specify the <soap:body> definition before the <soap:header>
> definition. Because you have defined two parts in the message, the
> <soap:body> must include the "parts" attribute and specify the specific
> part
> that goes in the body. Your <soap:header> must refer to the message
> (tns:processMessageIn) that contains the header part definition. E.g.,
>
>                        <input>
>                                <soap:body parts="processMessage"
> use="literal"/>
>                                 <soap:header
> message="tns:processMessageIn"
>                                        part="requestHeader"
> use="literal"/>
>                        </input>
>
> Anne
> On 5/17/06, Matt Magoffin <ap...@msqr.us> wrote:
>>
>> Hello, I am trying to work with a WSDL that requires a header element,
>> and
>> am having trouble getting Axis 1.4 to correctly generate the SOAP
>> message.
>> I've generated Axis classes from the WSDL. The best I've been able to do
>> is get the header element to show up correctly in the SOAP header, but
>> then it also shows up as the body element, with the expected body
>> element
>> as a child, like this (XML truncated as to simplify):
>>
>> <soapenv:Envelope
>> xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" ...
>>   <soapenv:Header>
>>     <ns1:payloadManifest
>> xmlns:ns1="http://www.starstandards.org/webservices/...
>>       <manifest element="ProcessSalesLead" id="Content0"
>> namespaceURI="...
>>     </ns1:payloadManifest>
>>   </soapenv:Header>
>>   <soapenv:Body>
>>     <payloadManifest
>> xmlns="http://www.starstandards.org/webservices/2003/12/transport">
>>       <ProcessMessage/>
>>     </payloadManifest>
>>   </soapenv:Body>
>> </soapenv:Envelope>
>>
>> Here the <ns1:payloadManifest> element is as expected in the
>> <soapenv:Header> but the expected element in <soapenv:Body> is the
>> <ProcessMessage/> element, not another <payloadManifest> element.
>>
>> The relevant WSDL I have is arranged as such:
>>
>>         <message name="ProcessMessageIn">
>>                 <part name="processMessage"
>> element="starws:ProcessMessage"/>
>>                 <part name="requestHeader"
>> element="starws:payloadManifest"/>
>>         </message>
>>
>>         <message name="ProcessMessageOut">
>>                 <part name="processMessageResponse"
>> element="starws:ProcessMessageResponse"/>
>>                 <part name="responeHeader"
>> element="starws:payloadManifest"/>
>>         </message>
>>
>>         <portType name="StarTransportPortTypes">
>>                 <operation name="ProcessMessage">
>>                         <input message="tns:ProcessMessageIn"/>
>>                         <output message="tns:ProcessMessageOut"/>
>>                 </operation>
>>         </portType>
>>
>>         <binding name="StarTransport" type="tns:StarTransportPortTypes">
>>                 <soap:binding transport="
>> http://schemas.xmlsoap.org/soap/http"
>>                         style="document"/>
>>                 <operation name="ProcessMessage">
>>                         <soap:operation
>>                                 soapAction="
>> http://www.starstandards.org/.../ProcessMessage"
>>                                 style="document"/>
>>                         <input>
>>                                 <soap:header
>> message="tns:ManifestHeader"
>>                                         part="requestHeader"
>> use="literal"/>
>>                                 <soap:body use="literal"/>
>>                         </input>
>>                         <output>
>>                                 <soap:header
>> message="tns:ManifestHeader"
>>                                         part="responseHeader"
>> use="literal"/>
>>                                 <soap:body use="literal"/>
>>                         </output>
>>                 </operation>
>>         </binding>
>>
>> Anything look fishy here? I'm at a loss at this point... I've attached
>> the
>> full WSDL for reference.
>>
>> -- m@
>>
>>
>>
>

Re: soap:header element shows up in soap Header _and_ Body

Posted by Anne Thomas Manes <at...@gmail.com>.
Matt,

A few mistakes in your WSDL:

You must specify the <soap:body> definition before the <soap:header>
definition. Because you have defined two parts in the message, the
<soap:body> must include the "parts" attribute and specify the specific part
that goes in the body. Your <soap:header> must refer to the message
(tns:processMessageIn) that contains the header part definition. E.g.,

                       <input>
                               <soap:body parts="processMessage"
use="literal"/>
                                <soap:header message="tns:processMessageIn"
                                       part="requestHeader" use="literal"/>
                       </input>

Anne
On 5/17/06, Matt Magoffin <ap...@msqr.us> wrote:
>
> Hello, I am trying to work with a WSDL that requires a header element, and
> am having trouble getting Axis 1.4 to correctly generate the SOAP message.
> I've generated Axis classes from the WSDL. The best I've been able to do
> is get the header element to show up correctly in the SOAP header, but
> then it also shows up as the body element, with the expected body element
> as a child, like this (XML truncated as to simplify):
>
> <soapenv:Envelope
> xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" ...
>   <soapenv:Header>
>     <ns1:payloadManifest
> xmlns:ns1="http://www.starstandards.org/webservices/...
>       <manifest element="ProcessSalesLead" id="Content0" namespaceURI="...
>     </ns1:payloadManifest>
>   </soapenv:Header>
>   <soapenv:Body>
>     <payloadManifest
> xmlns="http://www.starstandards.org/webservices/2003/12/transport">
>       <ProcessMessage/>
>     </payloadManifest>
>   </soapenv:Body>
> </soapenv:Envelope>
>
> Here the <ns1:payloadManifest> element is as expected in the
> <soapenv:Header> but the expected element in <soapenv:Body> is the
> <ProcessMessage/> element, not another <payloadManifest> element.
>
> The relevant WSDL I have is arranged as such:
>
>         <message name="ProcessMessageIn">
>                 <part name="processMessage"
> element="starws:ProcessMessage"/>
>                 <part name="requestHeader"
> element="starws:payloadManifest"/>
>         </message>
>
>         <message name="ProcessMessageOut">
>                 <part name="processMessageResponse"
> element="starws:ProcessMessageResponse"/>
>                 <part name="responeHeader"
> element="starws:payloadManifest"/>
>         </message>
>
>         <portType name="StarTransportPortTypes">
>                 <operation name="ProcessMessage">
>                         <input message="tns:ProcessMessageIn"/>
>                         <output message="tns:ProcessMessageOut"/>
>                 </operation>
>         </portType>
>
>         <binding name="StarTransport" type="tns:StarTransportPortTypes">
>                 <soap:binding transport="
> http://schemas.xmlsoap.org/soap/http"
>                         style="document"/>
>                 <operation name="ProcessMessage">
>                         <soap:operation
>                                 soapAction="
> http://www.starstandards.org/.../ProcessMessage"
>                                 style="document"/>
>                         <input>
>                                 <soap:header message="tns:ManifestHeader"
>                                         part="requestHeader"
> use="literal"/>
>                                 <soap:body use="literal"/>
>                         </input>
>                         <output>
>                                 <soap:header message="tns:ManifestHeader"
>                                         part="responseHeader"
> use="literal"/>
>                                 <soap:body use="literal"/>
>                         </output>
>                 </operation>
>         </binding>
>
> Anything look fishy here? I'm at a loss at this point... I've attached the
> full WSDL for reference.
>
> -- m@
>
>
>

Re: soap:header element shows up in soap Header _and_ Body

Posted by Anne Thomas Manes <at...@gmail.com>.
Matt,

A few mistakes in your WSDL:

You must specify the <soap:body> definition before the <soap:header>
definition. Because you have defined two parts in the message, the
<soap:body> must include the "parts" attribute and specify the specific part
that goes in the body. Your <soap:header> must refer to the message
(tns:processMessageIn) that contains the header part definition. E.g.,

                       <input>
                               <soap:body parts="processMessage"
use="literal"/>
                                <soap:header message="tns:processMessageIn"
                                       part="requestHeader" use="literal"/>
                       </input>

Anne
On 5/17/06, Matt Magoffin <ap...@msqr.us> wrote:
>
> Hello, I am trying to work with a WSDL that requires a header element, and
> am having trouble getting Axis 1.4 to correctly generate the SOAP message.
> I've generated Axis classes from the WSDL. The best I've been able to do
> is get the header element to show up correctly in the SOAP header, but
> then it also shows up as the body element, with the expected body element
> as a child, like this (XML truncated as to simplify):
>
> <soapenv:Envelope
> xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" ...
>   <soapenv:Header>
>     <ns1:payloadManifest
> xmlns:ns1="http://www.starstandards.org/webservices/...
>       <manifest element="ProcessSalesLead" id="Content0" namespaceURI="...
>     </ns1:payloadManifest>
>   </soapenv:Header>
>   <soapenv:Body>
>     <payloadManifest
> xmlns="http://www.starstandards.org/webservices/2003/12/transport">
>       <ProcessMessage/>
>     </payloadManifest>
>   </soapenv:Body>
> </soapenv:Envelope>
>
> Here the <ns1:payloadManifest> element is as expected in the
> <soapenv:Header> but the expected element in <soapenv:Body> is the
> <ProcessMessage/> element, not another <payloadManifest> element.
>
> The relevant WSDL I have is arranged as such:
>
>         <message name="ProcessMessageIn">
>                 <part name="processMessage"
> element="starws:ProcessMessage"/>
>                 <part name="requestHeader"
> element="starws:payloadManifest"/>
>         </message>
>
>         <message name="ProcessMessageOut">
>                 <part name="processMessageResponse"
> element="starws:ProcessMessageResponse"/>
>                 <part name="responeHeader"
> element="starws:payloadManifest"/>
>         </message>
>
>         <portType name="StarTransportPortTypes">
>                 <operation name="ProcessMessage">
>                         <input message="tns:ProcessMessageIn"/>
>                         <output message="tns:ProcessMessageOut"/>
>                 </operation>
>         </portType>
>
>         <binding name="StarTransport" type="tns:StarTransportPortTypes">
>                 <soap:binding transport="
> http://schemas.xmlsoap.org/soap/http"
>                         style="document"/>
>                 <operation name="ProcessMessage">
>                         <soap:operation
>                                 soapAction="
> http://www.starstandards.org/.../ProcessMessage"
>                                 style="document"/>
>                         <input>
>                                 <soap:header message="tns:ManifestHeader"
>                                         part="requestHeader"
> use="literal"/>
>                                 <soap:body use="literal"/>
>                         </input>
>                         <output>
>                                 <soap:header message="tns:ManifestHeader"
>                                         part="responseHeader"
> use="literal"/>
>                                 <soap:body use="literal"/>
>                         </output>
>                 </operation>
>         </binding>
>
> Anything look fishy here? I'm at a loss at this point... I've attached the
> full WSDL for reference.
>
> -- m@
>
>
>