[ http://issues.apache.org/jira/browse/AXIS2-928?page=comments#action_12423454 ] Derek Foster commented on AXIS2-928: ------------------------------------
The version I was running when I reported this was the nightly build from about four days ago. I just downloaded and tested the latest nightly build, and verified that the bug still exists. > Not all added header elements are included in outgoing SOAP header unless run > under debugger - bug in OMElement caching? > ------------------------------------------------------------------------------------------------------------------------ > > Key: AXIS2-928 > URL: http://issues.apache.org/jira/browse/AXIS2-928 > Project: Apache Axis 2.0 (Axis2) > Issue Type: Bug > Components: client-api > Affects Versions: 1.0 > Reporter: Derek Foster > Priority: Critical > > Hi, folks. > I have two custom headers, CARSLogin and CARSPassword, that are declared and > used in my WSDL like so: > <types> > <xs:schema targetNamespace="http://www.c-corp.com/wsdl/2004-10-01/f"> > <xs:import namespace="http://www.dummy-temp-address" > schemaLocation="F.xsd"/> > <xs:element name="return" type="xs:string"/> > <xs:element name="failure" type="xs:string"/> > </xs:schema> > <xs:schema targetNamespace="http://www.c-corp.com/wsdl/2004-10-01/C"> > <xs:element name="CPassword" type="xs:string"/> > <xs:element name="CLogin" type="xs:string"/> > </xs:schema> > </types> > <message name="FEvent"> > <part name="contents" element="f:full-event-update"/> > </message> > <message name="FResponse"> > <part name="return" element="tns:return"/> > </message> > <message name="CPassword"> > <part name="CPassword" element="C:CPassword"/> > </message> > <message name="CLogin"> > <part name="CLogin" element="C:CLogin"/> > </message> > <message name="Failure"> > <part name="faultDetail" element="tns:failure"/> > </message> > <portType name="FPortType"> > <documentation>F Port Type</documentation> > <operation name="acceptFEvent" parameterOrder="contents"> > <input name="acceptFEventRequest" message="tns:FEvent"/> > <output name="acceptFEventResponse" message="tns:FResponse"/> > <fault name="Failure" message="tns:Failure"/> > </operation> > </portType> > <binding name="FSoapBinding" type="tns:FPortType"> > <documentation>F Soap Binding</documentation> > <soap:binding style="document" > transport="http://schemas.xmlsoap.org/soap/http"/> > <operation name="acceptFEvent"> > <soap:operation soapAction="acceptFEventAction"/> > <input> > <soap:header message="tns:CLogin" part="CLogin" use="literal"/> > <soap:header message="tns:CPassword" part="CPassword" > use="literal"/> > <soap:body use="literal"/> > </input> > <output> > <soap:body use="literal"/> > </output> > <fault name="Failure"> > <soap:fault name="Failure" use="literal"/> > </fault> > </operation> > </binding> > Now, when I use WSDL2Java to generate XMLBeans Java code for these, and try > to write a client that will send a message in this format, I write something > like this: > final CLoginDocument login = CLoginDocument.Factory.newInstance(); > login.setCLogin( "testlogin" ); > final CPasswordDocument password = > CPasswordDocument.Factory.newInstance(); > password.setCPassword( "testpassword" ); > final FServiceStub service = new FServiceStub( null, targetEndpoint ); > final FullEventUpdateDocument fullEventUpdate = > FullEventUpdateDocument.Factory.newInstance(); > fullEventUpdate.setFullEventUpdate( getSituation() ); > return service.acceptFEvent( fullEventUpdate, login, password ); > This seems reasonable, and mostly works. Except that when I look at the SOAP > output using TCPMon, the SOAP header that is included in the outgoing SOAP > message contains the CLogin element as expected, but totally omits the > CPassword element (!). I can find no reason for this. Both were passed to the > stub, and both are non-null, so both should be included in the output. > When I step through the code in the stub using a debugger, however, then the > code seems to correctly generate the header including both the login and > password, as I would expect. So this is a stereotypical "heisenbug" as per > the Jargon File: everything works fine when I run it under the debugger and > watch what is happening, but it fails when run normally. > My theory is that the debugger is calling toString() on various items such as > the SOAP envelope which is constructed to contain both the CLogin and CHeader > elements. I suspect that calling toString() in this fashion forces the > underlying OMElements to cache the results of parsing the XML, and that when > it comes time to generate the SOAP message for output, reading from this > cache works differently from parsing the header elements directly somehow. > Regardless, this seems like a pretty serious bug in Axis2: If I add multiple > header elements to a message, I expect that they all should be included in > the outgoing SOAP message, but that is not happening unless I run the program > under a debugger. The fact that this is nondeterministic hints at a caching > or multithreading bug at some level within the Axis architecture, which is > quite worrisome, since the process of formatting and sending a SOAP message > should be completely deterministic and repeatable. > Derek -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]