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

Dave MacLean commented on AXIS2-747:
------------------------------------

Something to add...if in the Axis2 source code for the MessageContext class, 
you can add a line to setEnvelope that seems to fix this problem:

    public void setEnvelope(SOAPEnvelope envelope) throws AxisFault {
        this.envelope = envelope;
        envelope.toString(); //this line fixes the envelope's namespace problems
        
        String soapNamespaceURI = envelope.getNamespace().getName();

        if (SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI
                .equals(soapNamespaceURI)) {
            isSOAP11 = false;
        } else if (SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI
                .equals(soapNamespaceURI)) {
            isSOAP11 = true;
        } else {
            throw new AxisFault(
                    "Unknown SOAP Version. Current Axis handles only SOAP 1.1 
and SOAP 1.2 messages");
        }
    }


So I'm not sure if this is a problem with the Axiom class itself or the Axis2's 
core use and instantiation of it.  For now we're forced to hack the 
MessageContext.java file on our side to make this work.

>  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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to