You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@axis.apache.org by "SECRIST,MARK S (HP-FtCollins,ex1)" <ma...@hp.com> on 2003/05/22 21:55:41 UTC

RE: Odd behavior using SignedSOAPEnvelope (empty namespaces inser ted)

I ran into an issue that is documented in an earlier query sent to
axis-user.  Since then, I've been able to isolate the problem (or address
the symptom) with the ns="" problem.  I have just verified that it still
exists with the most recent 5/22 nightly build.  It seems to have to do with
the way I declare my schema.  If I follow the WS-I basic profile
recommendation, I declare my schema as follows:

  <xs:schema targetNamespace="uri:supplier.daredevil.atc.hp.com" 
             xmlns:xs="http://www.w3.org/2001/XMLSchema" 
             xmlns:sup="uri:supplier.daredevil.atc.hp.com" 
             elementFormDefault="qualified"
attributeFormDefault="unqualified">

The expected behavior is that the root element of my message will reference
the namespace as:
    <QuoteRequest xmlns="uri:supplier.daredevil.atc.hp.com">

and the child elements will inherit that namespace without explicitly
referencing it.  However, Axis seems to loose that part of the WSDL
definition when being deployed to the server.  As a result, the dynamic WSDL
document returned is missing the elementFormDefault and attributeFormDefault
attributes in the schema tag.  This can be compensated for by explicitly
adding form="unqualified" to the child elements of the root of the request
and response elements in the original WSDL file used to generate the server
deployment.  However, this seems like a bit of a hack, but it does make
things work.

I have the full WSDL file if someone is interested in having a look at it,
but it appears that Axis is still broken in this regard.  I can't say when,
but I believe this did work as expected once upon a time around the 1.1.
beta timeframe.

What I found is that the problem seems to manifest itself in the helper
classes that are generated.  The server side helper class for QuoteRequest
has the following static declaration for itself and its child elements:

    static {
        typeDesc.setXmlType(new
javax.xml.namespace.QName("uri:supplier.daredevil.atc.hp.com",
"QuoteRequestType"));
        org.apache.axis.description.ElementDesc elemField = new
org.apache.axis.description.ElementDesc();
        elemField.setFieldName("documentInfo");
        elemField.setXmlName(new
javax.xml.namespace.QName("uri:supplier.daredevil.atc.hp.com",
"DocumentInfo"));
        elemField.setXmlType(new
javax.xml.namespace.QName("uri:supplier.daredevil.atc.hp.com",
"DocumentInfoType"));
        typeDesc.addFieldDesc(elemField);
        elemField = new org.apache.axis.description.ElementDesc();
        elemField.setFieldName("customerDetails");
        elemField.setXmlName(new
javax.xml.namespace.QName("uri:supplier.daredevil.atc.hp.com",
"CustomerDetails"));
        elemField.setXmlType(new
javax.xml.namespace.QName("uri:supplier.daredevil.atc.hp.com",
"OwnerDetails"));
        typeDesc.addFieldDesc(elemField);
        elemField = new org.apache.axis.description.ElementDesc();
        elemField.setFieldName("partList");
        elemField.setXmlName(new
javax.xml.namespace.QName("uri:supplier.daredevil.atc.hp.com", "PartList"));
        elemField.setXmlType(new
javax.xml.namespace.QName("uri:supplier.daredevil.atc.hp.com",
"PartListType"));
        typeDesc.addFieldDesc(elemField);
    }

while the client helper class generated from the deployed service has the
following static declaration:

    static {
        typeDesc.setXmlType(new
javax.xml.namespace.QName("uri:supplier.daredevil.atc.hp.com",
"QuoteRequestType"));
        org.apache.axis.description.ElementDesc elemField = new
org.apache.axis.description.ElementDesc();
        elemField.setFieldName("documentInfo");
        elemField.setXmlName(new javax.xml.namespace.QName("",
"DocumentInfo"));
        elemField.setXmlType(new
javax.xml.namespace.QName("uri:supplier.daredevil.atc.hp.com",
"DocumentInfoType"));
        typeDesc.addFieldDesc(elemField);
        elemField = new org.apache.axis.description.ElementDesc();
        elemField.setFieldName("customerDetails");
        elemField.setXmlName(new javax.xml.namespace.QName("",
"CustomerDetails"));
        elemField.setXmlType(new
javax.xml.namespace.QName("uri:supplier.daredevil.atc.hp.com",
"OwnerDetails"));
        typeDesc.addFieldDesc(elemField);
        elemField = new org.apache.axis.description.ElementDesc();
        elemField.setFieldName("partList");
        elemField.setXmlName(new javax.xml.namespace.QName("", "PartList"));
        elemField.setXmlType(new
javax.xml.namespace.QName("uri:supplier.daredevil.atc.hp.com",
"PartListType"));
        typeDesc.addFieldDesc(elemField);
    }

I've found through experimentation that if I add the
"uri:supplier.daredevil.atc.hp.com" value to the client side static
declaration, that it works as expected.  So, somewhere along this
development, deployment route, something is breaking down.  This may be
related to bug 10566, which claims to have been fixed.

It isn't clear how these issues get submitted to the developer team.  I'm
going to try to send this also to the axis-dev mailing list in hopes that it
shows up there.

Any thoughts or similar experiences from folks out there?

Thanks,

Mark

____________________________________________
Mark Secrist, Senior Software Consultant
HP Developer Resources Organization (DRO) 
AppDev Advanced Technology Center
mark.secrist@hp.com  Tel: (970) 898-7490  


-----Original Message-----
From: SECRIST,MARK S (HP-FtCollins,ex1) [mailto:mark.secrist@hp.com]
Sent: Tuesday, May 20, 2003 5:12 PM
To: 'axis-user@ws.apache.org'
Subject: Odd behavior using SignedSOAPEnvelope (empty namespaces
inserted)


I seem to have a problem with the getSOAPEnvelopeAsDocument method of the
SignedSOAPEnvelop sample class associated with the Axis samples.  I've built
a document style web service in which I want to simply sign the body and
send it on.  Using the ClientSigningHandler and the SignedSOAPEnvelope
classes were very helpful.  I notices after moving to versions of Axis 1.1
that this now breaks my document being sent.  I start with a simple document
as follows:
 
 <soapenv:Body>
  <QuoteRequest xmlns="uri:supplier.daredevil.atc.hp.com">
   <DocumentInfo Date="05/19/2003"/>
   <CustomerDetails ContactEmail="buyer@hp.com" Name="Hewlett-Packard"
Id="12345-56789"/>
   <PartList>
    <PartItem QuotedPrice="0.0" SupplierPartSKU="SKU-1" PartDescription="1.7
Ghz CPU Box, 80GB HD" Quantity="5"/>
    <PartItem QuotedPrice="0.0" SupplierPartSKU="SKU-2" PartDescription="17
inch Monitor" Quantity="5"/>
    <PartItem QuotedPrice="0.0" SupplierPartSKU="SKU-3"
PartDescription="Really Fancy Printer" Quantity="5"/>
   </PartList>
  </QuoteRequest>
 </soapenv:Body>

When passed through the getSOAPEnvelopeAsDocument method, I get empty
namespaces in many of my subordinate elements as follows:

 <soapenv:Body>
  <QuoteRequest xsi:type="ns1:QuoteRequestType"
xmlns="uri:supplier.daredevil.atc.hp.com"
xmlns:ns1="uri:supplier.daredevil.atc.hp.com">
   <DocumentInfo Date="05/19/2003" xsi:type="ns1:DocumentInfoType"
xmlns=""/>
   <CustomerDetails ContactEmail="buyer@hp.com" Id="12345-56789"
Name="Hewlett-Packard" xsi:type="ns1:OwnerDetails" xmlns=""/>
   <PartList xsi:type="ns1:PartListType" xmlns="">
    <PartItem PartDescription="1.7 Ghz CPU Box, 80GB HD" Quantity="5"
QuotedPrice="0.0" SupplierPartSKU="SKU-1" xsi:type="ns1:PartItemType"/>
    <PartItem PartDescription="17 inch Monitor" Quantity="5"
QuotedPrice="0.0" SupplierPartSKU="SKU-2" xsi:type="ns1:PartItemType"/>
    <PartItem PartDescription="Really Fancy Printer" Quantity="5"
QuotedPrice="0.0" SupplierPartSKU="SKU-3" xsi:type="ns1:PartItemType"/>
   </PartList>
  </QuoteRequest>
 </soapenv:Body>

Does anyone have ideas as to what causes this and what I can do to eliminate
the problem?

I've also noticed that when I generate the server deployment from a static
WSDL and then try to generate a client from the deployed dynamic WSDL file
that I have the same problem.  Is this in fact an Axis problem or am I not
being specific enough in the WSDL schema definition?

Thanks,

Mark
____________________________________________
Mark Secrist, Senior Software Consultant
HP Developer Resources Organization (DRO) 
AppDev Advanced Technology Center
mark.secrist@hp.com  Tel: (970) 898-7490  

RE: Odd behavior using SignedSOAPEnvelope (empty namespaces inser ted)

Posted by Davanum Srinivas <di...@yahoo.com>.
See http://ws.apache.org/axis/bugs.html on how to submit bugs.

-- dims

--- "SECRIST,MARK S (HP-FtCollins,ex1)" <ma...@hp.com> wrote:
> I ran into an issue that is documented in an earlier query sent to
> axis-user.  Since then, I've been able to isolate the problem (or address
> the symptom) with the ns="" problem.  I have just verified that it still
> exists with the most recent 5/22 nightly build.  It seems to have to do with
> the way I declare my schema.  If I follow the WS-I basic profile
> recommendation, I declare my schema as follows:
> 
>   <xs:schema targetNamespace="uri:supplier.daredevil.atc.hp.com" 
>              xmlns:xs="http://www.w3.org/2001/XMLSchema" 
>              xmlns:sup="uri:supplier.daredevil.atc.hp.com" 
>              elementFormDefault="qualified"
> attributeFormDefault="unqualified">
> 
> The expected behavior is that the root element of my message will reference
> the namespace as:
>     <QuoteRequest xmlns="uri:supplier.daredevil.atc.hp.com">
> 
> and the child elements will inherit that namespace without explicitly
> referencing it.  However, Axis seems to loose that part of the WSDL
> definition when being deployed to the server.  As a result, the dynamic WSDL
> document returned is missing the elementFormDefault and attributeFormDefault
> attributes in the schema tag.  This can be compensated for by explicitly
> adding form="unqualified" to the child elements of the root of the request
> and response elements in the original WSDL file used to generate the server
> deployment.  However, this seems like a bit of a hack, but it does make
> things work.
> 
> I have the full WSDL file if someone is interested in having a look at it,
> but it appears that Axis is still broken in this regard.  I can't say when,
> but I believe this did work as expected once upon a time around the 1.1.
> beta timeframe.
> 
> What I found is that the problem seems to manifest itself in the helper
> classes that are generated.  The server side helper class for QuoteRequest
> has the following static declaration for itself and its child elements:
> 
>     static {
>         typeDesc.setXmlType(new
> javax.xml.namespace.QName("uri:supplier.daredevil.atc.hp.com",
> "QuoteRequestType"));
>         org.apache.axis.description.ElementDesc elemField = new
> org.apache.axis.description.ElementDesc();
>         elemField.setFieldName("documentInfo");
>         elemField.setXmlName(new
> javax.xml.namespace.QName("uri:supplier.daredevil.atc.hp.com",
> "DocumentInfo"));
>         elemField.setXmlType(new
> javax.xml.namespace.QName("uri:supplier.daredevil.atc.hp.com",
> "DocumentInfoType"));
>         typeDesc.addFieldDesc(elemField);
>         elemField = new org.apache.axis.description.ElementDesc();
>         elemField.setFieldName("customerDetails");
>         elemField.setXmlName(new
> javax.xml.namespace.QName("uri:supplier.daredevil.atc.hp.com",
> "CustomerDetails"));
>         elemField.setXmlType(new
> javax.xml.namespace.QName("uri:supplier.daredevil.atc.hp.com",
> "OwnerDetails"));
>         typeDesc.addFieldDesc(elemField);
>         elemField = new org.apache.axis.description.ElementDesc();
>         elemField.setFieldName("partList");
>         elemField.setXmlName(new
> javax.xml.namespace.QName("uri:supplier.daredevil.atc.hp.com", "PartList"));
>         elemField.setXmlType(new
> javax.xml.namespace.QName("uri:supplier.daredevil.atc.hp.com",
> "PartListType"));
>         typeDesc.addFieldDesc(elemField);
>     }
> 
> while the client helper class generated from the deployed service has the
> following static declaration:
> 
>     static {
>         typeDesc.setXmlType(new
> javax.xml.namespace.QName("uri:supplier.daredevil.atc.hp.com",
> "QuoteRequestType"));
>         org.apache.axis.description.ElementDesc elemField = new
> org.apache.axis.description.ElementDesc();
>         elemField.setFieldName("documentInfo");
>         elemField.setXmlName(new javax.xml.namespace.QName("",
> "DocumentInfo"));
>         elemField.setXmlType(new
> javax.xml.namespace.QName("uri:supplier.daredevil.atc.hp.com",
> "DocumentInfoType"));
>         typeDesc.addFieldDesc(elemField);
>         elemField = new org.apache.axis.description.ElementDesc();
>         elemField.setFieldName("customerDetails");
>         elemField.setXmlName(new javax.xml.namespace.QName("",
> "CustomerDetails"));
>         elemField.setXmlType(new
> javax.xml.namespace.QName("uri:supplier.daredevil.atc.hp.com",
> "OwnerDetails"));
>         typeDesc.addFieldDesc(elemField);
>         elemField = new org.apache.axis.description.ElementDesc();
>         elemField.setFieldName("partList");
>         elemField.setXmlName(new javax.xml.namespace.QName("", "PartList"));
>         elemField.setXmlType(new
> javax.xml.namespace.QName("uri:supplier.daredevil.atc.hp.com",
> "PartListType"));
>         typeDesc.addFieldDesc(elemField);
>     }
> 
> I've found through experimentation that if I add the
> "uri:supplier.daredevil.atc.hp.com" value to the client side static
> declaration, that it works as expected.  So, somewhere along this
> development, deployment route, something is breaking down.  This may be
> related to bug 10566, which claims to have been fixed.
> 
> It isn't clear how these issues get submitted to the developer team.  I'm
> going to try to send this also to the axis-dev mailing list in hopes that it
> shows up there.
> 
> Any thoughts or similar experiences from folks out there?
> 
> Thanks,
> 
> Mark
> 
> ____________________________________________
> Mark Secrist, Senior Software Consultant
> HP Developer Resources Organization (DRO) 
> AppDev Advanced Technology Center
> mark.secrist@hp.com  Tel: (970) 898-7490  
> 
> 
> -----Original Message-----
> From: SECRIST,MARK S (HP-FtCollins,ex1) [mailto:mark.secrist@hp.com]
> Sent: Tuesday, May 20, 2003 5:12 PM
> To: 'axis-user@ws.apache.org'
> Subject: Odd behavior using SignedSOAPEnvelope (empty namespaces
> inserted)
> 
> 
> I seem to have a problem with the getSOAPEnvelopeAsDocument method of the
> SignedSOAPEnvelop sample class associated with the Axis samples.  I've built
> a document style web service in which I want to simply sign the body and
> send it on.  Using the ClientSigningHandler and the SignedSOAPEnvelope
> classes were very helpful.  I notices after moving to versions of Axis 1.1
> that this now breaks my document being sent.  I start with a simple document
> as follows:
>  
>  <soapenv:Body>
>   <QuoteRequest xmlns="uri:supplier.daredevil.atc.hp.com">
>    <DocumentInfo Date="05/19/2003"/>
>    <CustomerDetails ContactEmail="buyer@hp.com" Name="Hewlett-Packard"
> Id="12345-56789"/>
>    <PartList>
>     <PartItem QuotedPrice="0.0" SupplierPartSKU="SKU-1" PartDescription="1.7
> Ghz CPU Box, 80GB HD" Quantity="5"/>
>     <PartItem QuotedPrice="0.0" SupplierPartSKU="SKU-2" PartDescription="17
> inch Monitor" Quantity="5"/>
>     <PartItem QuotedPrice="0.0" SupplierPartSKU="SKU-3"
> PartDescription="Really Fancy Printer" Quantity="5"/>
>    </PartList>
>   </QuoteRequest>
>  </soapenv:Body>
> 
> When passed through the getSOAPEnvelopeAsDocument method, I get empty
> namespaces in many of my subordinate elements as follows:
> 
>  <soapenv:Body>
>   <QuoteRequest xsi:type="ns1:QuoteRequestType"
> xmlns="uri:supplier.daredevil.atc.hp.com"
> xmlns:ns1="uri:supplier.daredevil.atc.hp.com">
>    <DocumentInfo Date="05/19/2003" xsi:type="ns1:DocumentInfoType"
> xmlns=""/>
>    <CustomerDetails ContactEmail="buyer@hp.com" Id="12345-56789"
> Name="Hewlett-Packard" xsi:type="ns1:OwnerDetails" xmlns=""/>
>    <PartList xsi:type="ns1:PartListType" xmlns="">
>     <PartItem PartDescription="1.7 Ghz CPU Box, 80GB HD" Quantity="5"
> QuotedPrice="0.0" SupplierPartSKU="SKU-1" xsi:type="ns1:PartItemType"/>
>     <PartItem PartDescription="17 inch Monitor" Quantity="5"
> QuotedPrice="0.0" SupplierPartSKU="SKU-2" xsi:type="ns1:PartItemType"/>
>     <PartItem PartDescription="Really Fancy Printer" Quantity="5"
> QuotedPrice="0.0" SupplierPartSKU="SKU-3" xsi:type="ns1:PartItemType"/>
>    </PartList>
>   </QuoteRequest>
>  </soapenv:Body>
> 
> Does anyone have ideas as to what causes this and what I can do to eliminate
> the problem?
> 
> I've also noticed that when I generate the server deployment from a static
> WSDL and then try to generate a client from the deployed dynamic WSDL file
> that I have the same problem.  Is this in fact an Axis problem or am I not
> being specific enough in the WSDL schema definition?
> 
> Thanks,
> 
> Mark
> ____________________________________________
> Mark Secrist, Senior Software Consultant
> HP Developer Resources Organization (DRO) 
> AppDev Advanced Technology Center
> mark.secrist@hp.com  Tel: (970) 898-7490  


=====
Davanum Srinivas - http://webservices.apache.org/~dims/

__________________________________
Do you Yahoo!?
The New Yahoo! Search - Faster. Easier. Bingo.
http://search.yahoo.com