You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by "Ajith Harshana Ranabahu (JIRA)" <ji...@apache.org> on 2006/06/02 09:07:31 UTC

[jira] Commented: (AXIS2-747) Missing namespace on subelement

    [ http://issues.apache.org/jira/browse/AXIS2-747?page=comments#action_12414365 ] 

Ajith Harshana Ranabahu commented on AXIS2-747:
-----------------------------------------------

Hmm... this seems to be an XMLBeans issue to me. We rely on the XMLStreamReader returned from the XMLBeans object and if it pumps out the correct namespace event then AXIOM should be serializing it.

I can suggest a small workaround but it will be very specific to you but you can anyway try it out.
The FromOM method it takes an externalnamespace map. What you have to do is to add the required namespace declaration to this map.
Inside  the relevant method add this piece of code just after the 
"_returnEnv = _returnMessageContext.getEnvelope();"

 java.util.Map externalNsMap = getEnvelopeNamespaces(_returnEnv);
externalNsMap.put("ses","session.dsws.businessobjects.com");

and then replace the getEnvelopeNamespaces(_returnEnv) part in the fromOm method call to externalNsMap.

I'll also look into this and will query the XMLbeans people if required 

>  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
>     Assignee: 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: axis-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-dev-help@ws.apache.org