Hi Deepal,
[jira] Created: (AXIS2-747) Missing namespace on subelement
Missing namespace on subelement
--------------------------------
Key: AXIS2-747
URL: http://issues.apache.org/jira/browse/AXIS2-747
Project: Apache Axis 2.0 (Axis2)
Type: Bug
Components: om
Versions: 1.0
Environment: Windows 2K3, JDK 1.5, AXIS2 1.0 and Eclipse 3.1 with
tomcat plugin
Reporter: Qi An
Priority: Critical
Thanks for your help!
-Dave
-----Original Message-----
From: Deepal Jayasinghe [mailto:[EMAIL PROTECTED]
Sent: Monday, May 15, 2006 10:13 AM
To: [email protected]
Subject: Re: [Axis2 1.0] Missing namespace on subelement
pls create a JIRA
Dave MacLean wrote:
>Hello everyone,
>We're running into a bit of trouble since we moved from axis2 0.95 to
>1.0.
>
>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.
>
>Is it possible there's a race condition here and that somehow the
>attribute list is getting overwritten, or are we doing something wrong?
>
>Thanks in advance,
>
>Dave
>
>
>
>
--
Thanks,
Deepal
................................................................
~Future is Open~