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't find a matching Java operation > > > for WSDD operation "ProvisioningTaskRequestOperation" (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& ;apos;t find a matching Java > > > operation for WSDD operation &quot;Provisioning > > > TaskRequestOperation&quot; (0 args) > > > faultActor: > > > faultNode: > > > faultDetail: > > > org.apache.axis.InternalException: java.lang.Exception: Couldn't > > > find a matching Java operation for WSDD operation > > > "ProvisioningTaskRequestOperation" > > > (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 > > > > ______________________________________________________________________ > > > > > >
