[ http://issues.apache.org/jira/browse/AXIS2-747?page=comments#action_12428107 ] Royston Shufflebotham commented on AXIS2-747: ---------------------------------------------
I've just been tracing this through, and it *seems* to be the Jsr173 XMLStreamReader wrapper that's going wrong. Either that, or it's doing the right thing and there's some other way to get the namespace info out. It's certainly not exposing the subtype namespace prefix declaration as a first class attribute. Inside the MessageReceiverInOut.toEnvelope() method, calling dump() on the DocumentStub seems to give the correct response: the subtype namespace declaration attribute does appear. However, when stepping through, calling next() on the XMLStreamReader, the xmlns attribute is being skipped. This seems to be happening in Jsr173.java file in XMLBeans, where its getAttributeCount()/toAttr() methods examine each attribute to see if it is a "normal" attribute. Normal is defined as being at least a non-xmlns attribute. So it looks to me like xmlns attributes are being stripped out by the Stax wrapper of XMLBeans. As I said, I'm not sure if this is correct behaviour, but certainly that's the behaviour I'm seeing. > Missing namespace on subelement > -------------------------------- > > Key: AXIS2-747 > URL: http://issues.apache.org/jira/browse/AXIS2-747 > Project: Apache Axis 2.0 (Axis2) > Issue Type: Bug > Components: om > Affects Versions: 1.0 > Environment: Windows 2K3, JDK 1.5, AXIS2 1.0 and Eclipse 3.1 with > tomcat plugin > Reporter: Qi An > Assigned To: Ajith Harshana Ranabahu > Priority: Critical > > The below all worked fine on 0.95: > The complex type in question is defined in the wsdl as: > <s:complexType name="Credential"> > <s:sequence/> > </s:complexType> > <s:complexType name="EnterpriseCredential"> <s:complexContent> > <s:extension base="s0:Credential"> > <s:sequence/> > <s:attribute name="Login" type="s:string" use="required"/> > <s:attribute name="Password" type="s:string" use="optional"/> > <s:attribute name="Locale" type="s:string" use="optional"/> > <s:attribute name="TimeZone" type="s:string" use="optional"/> > <s:attribute name="Domain" type="s:string" use="optional"/> > <s:attribute name="AuthType" type="s:string" use="optional"/> > </s:extension> > </s:complexContent> > </s:complexType> > In the provider's skeleton, we have the following: > public com.businessobjects.dsws.session.LoginResponseDocument login( > com.businessobjects.dsws.session.LoginDocument param12) > throws > com.businessobjects.dsws.session.SessionSkeleton.DSWSExceptionException, > RemoteException { > Login obj = param12.getLogin(); > Credential cred = obj.getCredential(); > The problem is, on the getCredential() call, we actually get back an > object of type Credential (base class) when the method was invoked with > an enterprise credential. So that further on, on the line: > EnterpriseCredential enterpriseCredential = (EnterpriseCredential) cred; > We get a class cast exception. > Tracing through a bit with the SOAPMonitor, we noticed that the xml > envelope actually ends up looking like: > <?xml version='1.0' encoding='utf-8'?> > <soapenv:Envelope > xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> > <soapenv:Header /> > <soapenv:Body> > <login xmlns="session.dsws.businessobjects.com"> > <credential xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > Password="" Domain="vanyma01" xsi:type="ses:EnterpriseCredential" > Login="administrator" /> > </login> > </soapenv:Body> > </soapenv:Envelope> > Where the namespace definition of "ses" is clearly missing. If you > trace through the deserialization code a bit, this is why the object > comes back as the base class instead of the extended type. > Once thing interesting one of our developer's noticed, is that if, on > the consumer side, you add the lines: > XmlOptions op1 = new XmlOptions(); > op1.setSaveNamespacesFirst(); > m_credential = > EnterpriseCredential.Factory.newInstance(op1); > At the time you create the credential, it seems that *some of the time* > this fixes the problem, so that the xml appears as: > <?xml version='1.0' encoding='utf-8'?> > <soapenv:Envelope > xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> > <soapenv:Header /> > <soapenv:Body> > <login xmlns="session.dsws.businessobjects.com"> > <credential xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xmlns:ses="session.dsws.businessobjects.com" Password="" > Domain="vanyma01" xsi:type="ses:EnterpriseCredential" > Login="administrator" /> > </login> > </soapenv:Body> > </soapenv:Envelope> > But only some of the time. -- 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]