You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by "Andreas Veithen (JIRA)" <ji...@apache.org> on 2011/08/26 14:08:29 UTC

[jira] [Resolved] (AXIS2-5135) only the first child is copied in header element

     [ https://issues.apache.org/jira/browse/AXIS2-5135?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Andreas Veithen resolved AXIS2-5135.
------------------------------------

    Resolution: Duplicate

Same as AXIS2-5071.

> only the first child is copied in header element
> ------------------------------------------------
>
>                 Key: AXIS2-5135
>                 URL: https://issues.apache.org/jira/browse/AXIS2-5135
>             Project: Axis2
>          Issue Type: Bug
>          Components: adb, kernel
>    Affects Versions: 1.6.0
>         Environment: Linux 2.6.35.14-95.fc14.i686.PAE
> Java(TM) SE Runtime Environment (build 1.6.0_23-b05)
>            Reporter: Marco Benuzzi
>            Priority: Blocker
>
> In my wsdl I've the following message:
>     <wsdl:operation name="Security_Authenticate">
>       <soap:operation soapAction="http://xxxxxxxxxxxxxxxxxxx"/>
>       <wsdl:input>
>         <soap:header message="aws:Session" part="Session" use="literal"/>
>         <soap:body use="literal"/>
>       </wsdl:input>
>       <wsdl:output>
>         <soap:header message="aws:Session" part="Session" use="literal"/>
>         <soap:body use="literal"/>
>       </wsdl:output>
>     </wsdl:operation>
> The Session type used in the header is defined as follow:
> 	<xs:element name="Session">
> 		<xs:complexType>
> 			<xs:sequence>
> 				<xs:element name="SessionId" type="xs:string">
> 					<xs:annotation>
> 						<xs:documentation>This element defines the identifier part of the SessionId.</xs:documentation>
> 					</xs:annotation>
> 				</xs:element>
> 				<xs:element name="SequenceNumber" type="xs:string">
> 					<xs:annotation>
> 						<xs:documentation>This element defines the sequence number of the SessionId.</xs:documentation>
> 					</xs:annotation>
> 				</xs:element>
> 				<xs:element name="SecurityToken" type="xs:string">
> 					<xs:annotation>
> 						<xs:documentation>This element defines the SecurityToken of the SessionId.</xs:documentation>
> 					</xs:annotation>
> 				</xs:element>
> 			</xs:sequence>
> 		</xs:complexType>
> 	</xs:element>
> I'm using adb binding.
> The actual soap message generated is
> <?xml version='1.0' encoding='UTF-8'?>
> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
>   <soapenv:Header>
>     <ns1:Session xmlns:ns1="http://xxxxxxxxxxxxx.xsd" soapenv:mustUnderstand="0">
>       <ns1:SessionId>xxxxx</ns1:SessionId>
>     </ns1:Session>
>   </soapenv:Header>
>   <soapenv:Body>
>     <ns38:Security_Authenticate xmlns:ns38="........
> The Session element in the header is wrong because are missing two childs SequenceNumber and SecurityToken
> I had a look on the sources for axis2 and axiom and, in my opinion, the problem is in the method org.apache.axis2.client.Stub.addHeader()
>     protected void addHeader(OMElement omElementToadd,
>                              SOAPEnvelope envelop,
>                              boolean mustUnderstand){
>         SOAPHeaderBlock soapHeaderBlock =
>                 envelop.getHeader().addHeaderBlock(omElementToadd.getLocalName(),omElementToadd.getNamespace());
>         soapHeaderBlock.setMustUnderstand(mustUnderstand);
>         OMNode omNode = null;
>         // add child elements
>         for (Iterator iter = omElementToadd.getChildren(); iter.hasNext();){
>              omNode = (OMNode) iter.next();
>              soapHeaderBlock.addChild(omNode.cloneOMElement());
> /**
> PROBLEM HERE
> soapHeaderBlock.addChild changes the parent of omNode which is the current element of iter
> when iter.hasNext() is executed it use the parent of its current element to find the next one
> but the current element parent is changed (the parent is soapHeaderBlock instead of omElementToadd)
> PS: if you use axiom-1.2.12 you got a ConcurrentModificationException in the above code!!!!
> **/
>         }
>         OMAttribute omatribute = null;
>         // add attributes
>         for (Iterator iter = omElementToadd.getAllAttributes(); iter.hasNext();){
>              omatribute = (OMAttribute) iter.next();
>              soapHeaderBlock.addAttribute(omatribute);
>         }
>     }

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscribe@axis.apache.org
For additional commands, e-mail: java-dev-help@axis.apache.org