[prev in list] [next in list] [prev in thread] [next in thread] 

List:       axis-dev
Subject:    [jira] [Created] (AXIS2-5135) only the first child is copied in
From:       "Marco Benuzzi (JIRA)" <jira () apache ! org>
Date:       2011-08-26 11:24:30
Message-ID: 1367578738.17296.1314357870733.JavaMail.tomcat () hel ! zones ! apache ! org
[Download RAW message or body]

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


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic