When using document/literal, you need to use the <xsd:any> element
definition rather than the <xsd:anyType> type definition:

<wsdl:message name="fooRequest">
   <wsdl:part name="request" element="xsd:any"/>
</wsdl:message>

Per the JAX-RPC specification, an undefined type maps to a SOAPElement
object. But if you use the "message" style API, then the message maps
to a DOM.

Anne

On Apr 8, 2005 4:20 PM, Marc Lefebvre <[EMAIL PROTECTED]> wrote:
> Actually, we do want to process arbitrary XML documents.  I have been leaning 
> towards the <xsd:anyType> type but am still unclear as to WHAT the argument 
> type is in the method for the webservice?  I have seen the suggesting of 
> making it a java.lang.Object but we would probably be dealing with some class 
> that represents our XML document. My second question is, what *is* this XML 
> Document java class type is the best to use for passing to this webservices 
> method?
> 
> Your message based idea is intriguing as well.  I will probably spike out a 
> variety of methods to see which fits best with what we want to do.
> 
> Sorry if these are obvious questions, I am new to all of this.
> 
> Thanks,
> 
> -Marc
> 
> -----Original Message-----
> From: Anne Thomas Manes [mailto:[EMAIL PROTECTED]
> Sent: Friday, April 08, 2005 9:46 AM
> To: [email protected]
> Subject: Re: Document style web services
> 
> Actually, I don't think Marc wants to use <xsd:any> or <xsd:anyType>.
> You only want to use <xsd:any> if you want to be able to process
> arbitrary XML documents. But from what Marc describes, I think he
> plans to exchange XML documents with predefined schemas.
> 
> Marc,
> 
> If your goal is security and interoperability, then I suggest you use
> the Axis "wrapped" style. It will produce a document/literal message
> which contains the method name and the arguments. But it also allows
> your Java application to work with Java objects, and Axis
> automatically maps the Java to the XML documents for you.
> 
> If you look through the archives, you'll see that I recommend a WSDL
> First (tm) approach to web services. What that means is that you
> should start your application design by defining the XML Schema
> definitions of your request and response messages, then import those
> schemas into your WSDL document, then generating your client and
> server code from the WSDL.
> 
> See my blog for a description of the "wrapped" style:
> http://atmanes.blogspot.com/2005/03/wrapped-documentliteral-convention.html
> 
> Here's an example of a wrapped document/literal WSDL file:
> 
> <wsdl:definitions name='HelloWorld'
>     targetNamespace='urn:samples/HelloWorld'
>     xmlns:tns='urn:samples/HelloWorld'
>     xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'
>     xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/'
>     xmlns:xsd='http://www.w3.org/2001/XMLSchema'>
> 
>     <wsdl:types>
>        <xsd:schema targetNamespace='urn:samples/HelloWorld'
>             xmlns:types='urn:samples/HelloWorld/types'>
>           <xsd:import namespace="urn:samples/HelloWorld/types'/>
>           <xsd:element name='hello'>
>              <xsd:complexType>
>                 <xsd:sequence>
>                    <xsd:element ref='types:In'/>
>                 </xsd:sequence>
>              </xsd:complexType>
>           </xsd:element>
>           <xsd:element name='helloReturn'>
>              <xsd:complexType>
>                 <xsd:sequence>
>                    <xsd:element ref='types:Out'/>
>                 </xsd:sequence>
>              </xsd:complexType>
>           </xsd:element>
>        </xsd:schema>
>        <xsd:schema targetNamespace='urn:samples/HelloWorld/types'>
>           <xsd:element name='In' type='xsd:string'/>
>           <xsd:element name='Out' type='xsd:string'/>
>        </xsd:schema>
>     </wsdl:types>
> 
>     <wsdl:message name='helloRequest'>
>         <wsdl:part name='parameters' element='tns:hello'/>
>     </wsdl:message>
>     <wsdl:message name='helloResponse'>
>         <wsdl:part name='parameters' element='tns:helloReturn'/>
>     </wsdl:message>
> 
>     <wsdl:portType name='HelloWorldPT'>
>         <wsdl:operation name='hello'>
>             <wsdl:input message='tns:helloRequest'/>
>             <wsdl:output message='tns:helloResponse'/>
>         </wsdl:operation>
>     </wsdl:portType>
> 
>     <wsdl:binding name='HelloWorldSOAPBinding' type='tns:HelloWorldPT'>
>         <soap:binding
>             transport='http://schemas.xmlsoap.org/soap/http'
>             style='document'/>
>         <wsdl:operation name='hello'>
>             <soap:operation
>               soapAction='urn:samples/Helloworld/hello'
>               style='document'/>
>             <wsdl:input>
>                 <soap:body use='literal'/>
>             </wsdl:input>
>             <wsdl:output>
>                 <soap:body use='literal'/>
>             </wsdl:output>
>         </wsdl:operation>
>     </wsdl:binding>
> 
>     <wsdl:service name='HelloWorldService'>
>         <wsdl:port name='HelloWorldPort' binding='tns:HelloWorldBinding'>
>             <soap:address location='http://your.company.com/HelloWorld/'/>
>         </wsdl:port>
>     </wsdl:service>
> </wsdl:definitions>
> 
> Now, if in fact you don't want to use the wrapped style, and instead
> you want complete control over the processing of your messages, then I
> still recommend that you define your WSDL in exactly the same way, but
> from a programming perspective, you should use the Axis "message"
> style.
> 
> Message style services can support any of the following four signatures:
> 
> public Element [] method(Element [] bodies);
> public SOAPBodyElement [] method (SOAPBodyElement [] bodies);
> public Document method(Document body);
> public void method(SOAPEnvelope req, SOAPEnvelope resp);
> 
> Regards,
> Anne
> 
> On Apr 7, 2005 6:21 PM, Soti, Dheeraj <[EMAIL PROTECTED]> wrote:
> > Marc,
> >
> > See if the following link can help you.
> >
> > https://bpcatalog.dev.java.net/nonav/soa/doc-anytype/
> >
> > Dheeraj
> >
> > -----Original Message-----
> > From: Marc Lefebvre [mailto:[EMAIL PROTECTED]
> > Sent: Thursday, April 07, 2005 1:28 PM
> > To: [email protected]
> > Subject: Document style web services
> >
> > In my current project I am going to be using AXIS with TOMCAT using Java to
> > develop some Webservices.  Rather than using the typical RPC methods, like 
> > the
> > examples in the documentation, we want to pass an XML Document back and 
> > forth
> > between server and client.  This is for two reasons, security, and
> > interoperability with existing XML services.  This XML document would have 
> > the
> > method calls and args in body.
> >
> > So, the questions I have are:
> >
> > 1) What is the datatype of the argument and return type that represents the 
> > XML
> > document in our Request and Response methods that we are going to expose 
> > through
> > AXIS Web Services?
> >
> > 2) When generating the WSDL and WSDD, how do we specify to the utility that 
> > we
> > are gong to be using this document style rather than the typical RPC style. 
> >  I
> > somewhat understand the idea of:
> >
> > <soap:binding style="document" transport="uri">
> >
> > or the use of:
> >
> > <soap:operation soapAction="uri" style="document">
> >
> > but HOW do we enable this mode in AXIS without tweaking the generated WSDL 
> > file,
> > specifically when we use the auto generation utility: Java2WSDL and then
> > WSDL2Java to generate the web service stubs?
> >
> > I appreciate any advice or pointers.
> >
> > Regards,
> >
> > Marc
>

Reply via email to