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 Pedro Salazar <pe...@ptinovacao.pt> on 2003/10/07 15:53:50 UTC

WSDL: operation with attachment?

Greetings,

I read many threads on this list about SOAP attachments but I didn't saw
a sample of well formed WSDL document with SOAP attachments (only java
implementation code). I was looking in http://www.w3.org/TR/wsdl for
more details but my WSDL sample throws this error on the
<axis-wsdl2java> task:

....
[axis-wsdl2java] java.io.IOException: <input ..>, <output ..> or <fault
..> in <portType> with undefined message found. message name is
'{http://www.ptinovacao.pt/nginpro/interfaces/wsdl}NGINPro_testWSAtachRequest'
[axis-wsdl2java]        at
org.apache.axis.wsdl.symbolTable.SymbolTable.ensureOperationMessageValid(SymbolTable.java:1064)
[axis-wsdl2java]        at
org.apache.axis.wsdl.symbolTable.SymbolTable.ensureOperationValid(SymbolTable.java:1094)
[axis-wsdl2java]        at
org.apache.axis.wsdl.symbolTable.SymbolTable.ensureOperationsOfPortTypeValid(SymbolTable.java:1141)
[axis-wsdl2java]        at
org.apache.axis.wsdl.symbolTable.SymbolTable.populatePortTypes(SymbolTable.java:1158)
[axis-wsdl2java]        at
org.apache.axis.wsdl.symbolTable.SymbolTable.populate(SymbolTable.java:576)
[axis-wsdl2java]        at
org.apache.axis.wsdl.symbolTable.SymbolTable.add(SymbolTable.java:421)
[axis-wsdl2java]        at
org.apache.axis.wsdl.symbolTable.SymbolTable.populate(SymbolTable.java:408)
[axis-wsdl2java]        at
org.apache.axis.wsdl.symbolTable.SymbolTable.populate(SymbolTable.java:393)
[axis-wsdl2java]        at
org.apache.axis.wsdl.gen.Parser$WSDLRunnable.run(Parser.java:245)
[axis-wsdl2java]        at java.lang.Thread.run(Thread.java:534)


My WSDL document is:

<wsdl ...>

  <types>

        <schema ..>
            ...
           <complexType name="ArrayOfBinary">
                <complexContent>
                    <restriction base="soapenc:Array">
                        <attribute ref="soapenc:arrayType" 
                            wsdl:arrayType="xsd:binary[]"/>
                    </restriction>
                </complexContent>
            </complexType>
	</schema>
   </types>

    <message name="NGINPro_testWSAttachRequest">
        <part name="aXML" type="xsd:string"/>
    </message>
    <message name="NGINPro_testWSAttachResponse">
        <part name="result" type="tns:ArrayOfBinary"/>
    </message>

    <message name="NGINProException">
        <part name="fault" type="xsd:string"/>
    </message>

   <portType ..>
	...
      <operation name="testWSAttach" 
                parameterOrder="aXML">
            <input message="tns:NGINPro_testWSAtachRequest"/>
            <output message="tns:NGINPro_testWSAttachResponse"/>
            <fault name="NGINProException" 
                    message="tns:NGINProException" />
        </operation>

   </portType>

  <binding ...>
   ...

   <operation name="testWSAttach">
            <input>
                <mime:mimeXml/>
            </input>
            <output>
                <mime:content type="*/*"/>
            </output>
            <fault name="NGINProException">
                <soap:fault 
               
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
                use="encoded" 
               
namespace="http://www.ptinovacao.pt/nginpro/interfaces/wsdl"/>
            </fault>

            <soap:operation soapAction="testWSAttach"/>
    </operation>


    <soap:binding 
        transport="http://schemas.xmlsoap.org/soap/http" 
        style="rpc"/>

    </binding>

    <service .../>

</wsdl>


Any hints or advice for a WSDL definition with a operation with SOAP
attachments?

thanks,
Pedro Salazar.
-- 
PS
pedro-b-salazar@ptinovacao.pt
PGP:0E129E31D803BC61


Re: WSDL: operation with attachment?

Posted by Pedro Salazar <pe...@ptinovacao.pt>.
Greetings,

First of all a few changes in my original post that I solved::

1)
>             ...
>            <complexType name="ArrayOfBinary">
>                 <complexContent>
>                     <restriction base="soapenc:Array">
>                         <attribute ref="soapenc:arrayType" 
>                             wsdl:arrayType="xsd:binary[]"/>
>                     </restriction>
>                 </complexContent>
>             </complexType>

- I changed the xsd:binary[] to xsd:base64Binary[].
(the "xsd:binary[]" must be a mistake in th WSDL 1.1 specification)

2)
>          <operation name="testWSAttach" 
>                 parameterOrder="aXML">
>             <input message="tns:NGINPro_testWSAtachRequest"/>
>             <output message="tns:NGINPro_testWSAttachResponse"/>
>             <fault name="NGINProException" 
>                     message="tns:NGINProException" />
>         </operation>

Here was a misspelling in the name of the input message (it misses a the
letter 't').

*Now*, 

I finally can generate the interfaces of my service *BUT* I have a
byte[][] in my service method where I was expecting the java object data
javax.activation.DataHandler like the specification of JAXRPC refers.

public byte[][] testWSAttach(java.lang.String aXML) throws
java.rmi.RemoteException,
pt.ptinovacao.nginpro.interfaces.service.NGINProException {
        return null;
}

Shouldn't I use the DataHandler to be used as a SOAP attachment???

thanks,
Pedro Salazar.
-- 
PS
pedro-b-salazar@ptinovacao.pt
PGP:0E129E31D803BC61