[ https://issues.apache.org/jira/browse/AXIS2-5071?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13047297#comment-13047297 ]
David Green-Lank commented on AXIS2-5071: ----------------------------------------- After spending some time getting the AXIS source code and debugging this, I have narrowed it down to the following code in Stub#addHeader(): OMNode omNode = null; // add child elements for (Iterator iter = omElementToadd.getChildren(); iter.hasNext();){ omNode = (OMNode) iter.next(); // after this line executes, iter.hasNext() returns true soapHeaderBlock.addChild(omNode); // after this line executes, iter.hasNext() returns false } So adding the omNode to the SOAP header causes a side effect on the iterator, and the <password> element is never added. My guess is that when an omNode is added to a new parent, it's removed from the old parent, and therefore, when the <username> element is added to the header, the <password> element shifts to position #0, and therefore iter.hasNext() returns false since there is no child at index 1 anymore. But that's just a guess, I didn't download the axiom source code. The following replacement code resolves the issue: // add child elements. make a safe copy first, since adding the OMNode to the SOAP envelope causes a side // effect on the iterator List<OMNode> nodesToAdd = new ArrayList<OMNode>(); for (Iterator iter = omElementToadd.getChildren(); iter.hasNext();){ OMNode omNode = (OMNode) iter.next(); nodesToAdd.add( omNode ); } for ( OMNode omNode : nodesToAdd ) { soapHeaderBlock.addChild( omNode ); } > Failure to populate all members of an xs:sequence in a SOAP header > ------------------------------------------------------------------ > > Key: AXIS2-5071 > URL: https://issues.apache.org/jira/browse/AXIS2-5071 > Project: Axis2 > Issue Type: Bug > Affects Versions: 1.6.0 > Environment: MacOSX Leopard, Apache AXIS 1.6.0, Java 1.6.0_24 > Reporter: David Green-Lank > Attachments: Screen shot 2011-06-10 at 8.11.15 AM.png, mytest.wsdl > > > There is a soap header declared in the wsdl that points to an element: > <xs:element name="authentication"> > <xs:complexType> > <xs:sequence> > <xs:element name="username" type="xs:string"/> > <xs:element name="password" type="xs:string"/> > </xs:sequence> > <xs:anyAttribute namespace="##other"/> > </xs:complexType> > </xs:element> > After running "sh wsdl2java.sh -uri <uri>" to create stubs, and I populate > that element with: > MyTestServiceStub stub = new MyTestServiceStub(); > MyTestServiceStub.Authentication auth = new > MyTestServiceStub.Authentication(); > auth.setUsername( "username" ); > auth.setPassword( "password" ); > stub.operation( new MyTestServiceStub.Operation(), auth, null ); > The following SOAP envelope is sent: > <?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope > xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><soapenv:Header><ns1:authentication > xmlns:ns1="urn:mytest" > soapenv:mustUnderstand="false"><ns1:username>username</ns1:username></ns1:authentication></soapenv:Header><soapenv:Body><ns1:operation > xmlns:ns1="urn:mytest" /></soapenv:Body></soapenv:Envelope> > Notice the supplied password element is missing. > Screenshot attached. -- 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-unsubscr...@axis.apache.org For additional commands, e-mail: java-dev-h...@axis.apache.org