Yes -- "wrapped" is the standard way to design a WSDL. Most systems
generate "wrapped" by default now -- .NET, SAP, IBM, Systinet, IONA,
etc.

I repeat. "Wrapped" *is* document/literal. It just uses a convention
that creates wrapper elements for the request and response messages.
It's also a best practice in terms of data modeling. Your XML data
structures should not be dependent on a particular service -- they
might need to be used by multiple services, therefore they should be
defined in a separate schema. Your service may need to combine
multiple data structures that come from multiple schemas. Yet your
service wants to define a single data structure to represent the input
and the output messages. That's what these wrapper elements do. And,
as a convenience, the input message name is the same as the operation
name.

Anne

On 6/16/05, Feng Xie (fxie) <[EMAIL PROTECTED]> wrote:
> I have concern about wrapped style -- is it a standard way ?
> 
> -Feng
> 
> -----Original Message-----
> From: Anne Thomas Manes [mailto:[EMAIL PROTECTED]
> Sent: Wednesday, June 15, 2005 8:14 PM
> To: [email protected]
> Subject: Re: No such operation error - malformed WSDL?
> 
> I finally allocated to review your WSDL. You have one error -- when
> using document/literal, your message <part> definitions must reference
> an element, not a type. And as I said before, it works a lot better if
> you use wrapped style rather than document style.
> 
> Here's an updated WSDL that fixes the error and uses the wrapped
> convention.
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <wsdl:definitions
>   xmlns="http://schemas.xmlsoap.org/wsdl/";
>   xmlns:impl="urn:xml-soapadapter"
>   xmlns:intf="urn:xml-soapadapter"
>   xmlns:tns="urn:ProvidentProvisioningTNS"
>   xmlns:xsd="http://www.w3.org/2001/XMLSchema";
>   xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
>   xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
>   targetNamespace="urn:ProvidentProvisioningTNS"
>   name="urn:ProvidentProvisioning">
>   <wsdl:types>
>     <xsd:schema elementFormDefault="qualified"
> targetNamespace="urn:ProvidentProvisioningTNS">
>       <xsd:element name="ProvisioningTaskRequestOperation">
>         <xsd:complexType>
>           <xsd:sequence>
>             <xsd:element minOccurs="0" maxOccurs="1" name="REQUESTID"
> type="xsd:string"/>
>             <xsd:element minOccurs="0" maxOccurs="1" name="SOTYPE"
> type="xsd:string"/>
>             <xsd:element minOccurs="0" maxOccurs="1" name="PRIORITY"
> type="xsd:string"/>
>             <xsd:element minOccurs="0" maxOccurs="1" name="RECOVERY"
> type="xsd:string"/>
>             <xsd:element minOccurs="0" maxOccurs="1" name="XML_SO"
> type="xsd:string"/>
>           </xsd:sequence>
>         </xsd:complexType>
>       </xsd:element>
>       <xsd:element name="ProvisioningTaskResponse">
>         <xsd:complexType>
>           <xsd:sequence>
>             <xsd:element name="ProvisioningTaskReturn"
> type="xsd:string"/>
>           </xsd:sequence>
>         </xsd:complexType>
>       </xsd:element>
>     </xsd:schema>
>   </wsdl:types>
>   <message name="ProvisioningTaskRequestMessage">
>     <part name="parameters"
> element="tns:ProvisioningTaskRequestOperation"/>
>   </message>
>   <message name="ProvisioningTaskAckMessage">
>     <part name="parameters" element="tns:ProvisioningTaskResponse"/>
>   </message>
>   <portType name="ProvisioningTaskRequestPortType">
>     <operation name="ProvisioningTaskRequestOperation">
>       <input message="tns:ProvisioningTaskRequestMessage"/>
>       <output message="tns:ProvisioningTaskAckMessage"/>
>     </operation>
>   </portType>
>   <binding name="ProvisioningTaskRequestSoapBinding"
> type="tns:ProvisioningTaskRequestPortType">
>     <soap:binding style="document"
> transport="http://schemas.xmlsoap.org/soap/http"/>
>     <operation name="ProvisioningTaskRequestOperation">
>       <soap:operation
> soapAction="ProvidentProvisioningTNS/ProvisioningTaskRequestOperation"/>
>       <input>
>         <soap:body use="literal"/>
>       </input>
>       <output>
>         <soap:body use="literal"/>
>       </output>
>     </operation>
>   </binding>
>   <service name="ProvisioningService">
>     <documentation>Provident Provisioning Service</documentation>
>     <port name="ProvisioningTaskRequestPort"
> binding="tns:ProvisioningTaskRequestSoapBinding">
>       <soap:address
> location="http://localhost:8880/axis/services/ProvidentProvisioning"/>
>     </port>
>   </service>
>         <!--  message declns -->
>         <!--  port type declns FINISHED -->
>         <!--  binding declns FINISHED -->
>         <!--  service decln  FINISHED  --> </wsdl:definitions>
> 
> On 6/15/05, Anne Thomas Manes <[EMAIL PROTECTED]> wrote:
> > I just grabbed the WSDL operation name, but perhaps your Java method
> > name is different? The "name" attribute should specify the Java method
> 
> > name.
> >
> > Anne
> >
> > On 6/15/05, Patrick Quinn <[EMAIL PROTECTED]> wrote:
> > > Thanks Anne, Feng
> > >
> > > You have both given me food for thought and I won't give up.
> > >
> > > Anne, I did try adding the operation definition as you suggested.
> See below:
> > >
> > > <deployment
> > >     xmlns="http://xml.apache.org/axis/wsdd/";
> > >     xmlns:java="http://xml.apache.org/axis/wsdd/providers/java";>
> > >   <!-- Services from ProvisioningService WSDL service -->
> > >       <parameter name="wsdlServicePort"
> value="ProvisioningTaskRequestPort"/>
> > >       <parameter name="className"
> > > value="ProvidentProvisioningTNS.ProvisioningTa
> > > skRequestSoapBindingSkeleton"/>
> > >       <parameter name="wsdlPortType"
> value="ProvisioningTaskRequestPortType"/>
> > >       <parameter name="allowedMethods" value="*"/>
> > >       <operation name="ProvisioningTaskRequestOperation"
> > >          qname="ns:ProvisioningTaskRequest"
> > >       />
> > >       <typeMapping
> > >         xmlns:ns="urn:ProvidentProvisioningTNS"
> > >         qname="ns:ProvisioningTaskRequest"
> > >
> type="java:ProvidentProvisioningTNS._ProvisioningTaskRequest"
> > >
> serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
> > >
> deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
> > >         encodingStyle=""
> > >       />
> > >   </service>
> > > </deployment>
> > >
> > >
> > > But I now get the following error:
> > >
> > >
> > > Exception in thread "main" AxisFault
> > >  faultCode:
> > > {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
> > >  faultSubcode:
> > >  faultString: org.apache.axis.InternalException:
> > > java.lang.Exception: Couldn&apos;t find a matching Java operation
> > > for WSDD operation &quot;ProvisioningTaskRequestOperation&quot; (0
> > > args)
> > >  faultActor:
> > >  faultNode:
> > >  faultDetail:
> > >         {http://xml.apache.org/axis/}stackTrace: AxisFault
> > >  faultCode:
> > > {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
> > >  faultSubcode:
> > >  faultString: org.apache.axis.InternalException:
> > > java.lang.Exception: Couldn&amp ;apos;t find a matching Java
> > > operation for WSDD operation &amp;quot;Provisioning
> > > TaskRequestOperation&amp;quot; (0 args)
> > >  faultActor:
> > >  faultNode:
> > >  faultDetail:
> > > org.apache.axis.InternalException: java.lang.Exception: Couldn't
> > > find a matching  Java operation for WSDD operation
> > > &quot;ProvisioningTaskRequestOperation&quot;
> > > (0 args)
> > >
> > >
> > > Is this something obvious, or is it better to take Feng's advice and
> build from scratch using Java2WSDL?
> > >
> > > Thanks again,
> > >
> > > Pat
> > >
> > >
> > >         -----Original Message-----
> > >         From: Anne Thomas Manes [mailto:[EMAIL PROTECTED]
> > >         Sent: Wed 15/06/2005 18:27
> > >         To: [email protected]
> > >         Cc:
> > >         Subject: Re: No such operation error - malformed WSDL?
> > >
> > >
> > >
> > >         Pat,
> > >
> > >         You're correct -- you need to add an <operation> definition
> to your
> > >         WSDD to help Axis map the <ProvisioningTaskRequest> message
> to the
> > >         ProvisioningTaskRequestOperation method.
> > >
> > >         The format of the <operation> definition is:
> > >
> > >                 <operation name="ProvisioningTaskRequestOperation"
> > >                            qname="ns:ProvisioningTaskRequest"
> > >                 />
> > >
> > >         (If you used wrapped style, you wouldn't have this problem.)
> > >
> > >         Anne
> > >
> > >
> > >         On 6/15/05, Feng Xie (fxie) <[EMAIL PROTECTED]> wrote:
> > >         >
> > >         > Pat:
> > >         >
> > >         > Too bad to hear that. Don't give up.
> > >         >
> > >         > In my case ( Axis + Tomcat 5 ), the soapAction is always
> "" in WSDL. What I
> > >         > did is come up a very basic Java interface and let
> Java2WSDL to generate a
> > >         > base WSDL. I then enhance the WSDL. I noticed that the
> soapAction is "" in
> > >         > the based WSDL created by Java2WSDL.
> > >         >
> > >         > However, the soapAction in your WSDL is not "". Not sure
> whether that will
> > >         > affect the dispatch process.
> > >         >
> > >         > Feng
> > >         >
> > >
> > >
> > >
> > > ____________________________________________________________________
> > > __ This email has been scanned by the MessageLabs Email Security
> > > System.
> > > For more information please visit http://www.messagelabs.com/email
> > >
> ______________________________________________________________________
> > >
> >
>

Reply via email to