axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From axis-...@ws.apache.org
Subject [jira] Created: (AXIS-1531) WSDL generated for attachments is non-standard
Date Thu, 26 Aug 2004 13:12:30 GMT
Message:

  A new issue has been created in JIRA.

---------------------------------------------------------------------
View the issue:
  http://issues.apache.org/jira/browse/AXIS-1531

Here is an overview of the issue:
---------------------------------------------------------------------
        Key: AXIS-1531
    Summary: WSDL generated for attachments is non-standard
       Type: Bug

     Status: Unassigned
   Priority: Major

    Project: Axis
 Components: 
             WSDL processing
   Versions:
             beta-2

   Assignee: 
   Reporter: Anand Natrajan

    Created: Thu, 26 Aug 2004 6:12 AM
    Updated: Thu, 26 Aug 2004 6:12 AM
Environment: Solaris 8, Ant 1.6.1

Description:
I have a web service implemented in Java using Axis. In this service, I have a method that
takes some simple params and returns a single attachment. Following the Axis examples, I have
defined the signature of this method as:
  public DataHandler fileReadAttach(AvakiPrincipal principal,
      String path, long offset, int count)
    throws RemoteException;

Then, I use java2wsdl wrapped/literal to generate a WSDL for this. The relevant parts of the
WSDL are as below:
  <element name="fileReadAttachResponse">
    <complexType>
      <sequence>
        <element name="fileReadAttachReturn"
          type="apachesoap:DataHandler"/>
      </sequence>
    </complexType>
  </element>
  ...
  <wsdl:operation name="fileReadAttach">
    <wsdlsoap:operation soapAction=""/>
    <wsdl:input name="fileReadAttachRequest">
      <wsdlsoap:body use="literal"/>
    </wsdl:input>
    <wsdl:output name="fileReadAttachResponse">
      <wsdlsoap:body use="literal"/>
    </wsdl:output>
  </wsdl:operation>

otice how the attachment refers to an apache:DataHandler element. This works wit
hout a problem when I write Java/Axis clients that target this service. However,
.NET won't even swallow the WSDL because it does not recognise the apachesoap nam
espace.

My question is: why isn't the generated WSDL something like:
  <wsdl:operation name="fileReadAttach">
    <wsdlsoap:operation soapAction=""/>
    <wsdl:input name="fileReadAttachRequest">
      <wsdlsoap:body use="literal"/>
    </wsdl:input>
    <wsdl:output name="fileReadAttachResponse">
      <mime:multipartRelated>
        <mime:part>
          <wsdlsoap:body parts="body" use="literal"/>
        </mime:part>
        <mime:part>
          <mime:content part="docs" type="text/plain"/>
        </mime:part>
    </mime:multipartRelated>
    </wsdl:output>
  </wsdl:operation>
Seems to me that's how it should come out. How do I make it so?

For giggles, I changed the WSDL by hand and tried to generate stubs for it. wsdl2java failed
to do so, with a NullPointerException:
[axis-wsdl2java] WSDL2Java
/home/local/anand/System/Jabc/wsdl/MyServiceWithMIMEDocLit.wsdl
[axis-wsdl2java] Running Wsdl2javaAntTask with parameters:
[axis-wsdl2java]        verbose:false
[axis-wsdl2java]        debug:false
[axis-wsdl2java]        quiet:false
[axis-wsdl2java]        server-side:true
[axis-wsdl2java]        skeletonDeploy:false
[axis-wsdl2java]        helperGen:false
[axis-wsdl2java]        factory:null
[axis-wsdl2java]        nsIncludes:[]
[axis-wsdl2java]        nsExcludes:[]
[axis-wsdl2java]        factoryProps:[]
[axis-wsdl2java]        testCase:false
[axis-wsdl2java]        noImports:false
[axis-wsdl2java]        NStoPkg:{urn:MyServiceCommon=com.abc.api.common.doclit, urn:MyServiceWithMIMEDocLit=com.abc.ws.stubs}
[axis-wsdl2java]        output:/home/local/anand/System/Jabc/wsdl
[axis-wsdl2java]        protocolHandlerPkgs:
[axis-wsdl2java]        deployScope:
[axis-wsdl2java]        URL:/home/local/anand/System/Jabc/wsdl/MyServiceWithMIMEDocLit.wsdl
[axis-wsdl2java]        all:false
[axis-wsdl2java]        typeMappingVersion:1.1
[axis-wsdl2java]        timeout:45000
[axis-wsdl2java]        failOnNetworkErrors:false
[axis-wsdl2java]        printStackTraceOnFailure:true
[axis-wsdl2java]        namespaceMappingFile:null
[axis-wsdl2java]        username:null
[axis-wsdl2java]        :passwordnull
[axis-wsdl2java]        :noWrappedfalse
[axis-wsdl2java]        :implementationClassNamenull
[axis-wsdl2java]        :classpathnull
[axis-wsdl2java]        http.proxyHost=null
[axis-wsdl2java]        http.proxyPort=null
[axis-wsdl2java]        http.proxyUser=null
[axis-wsdl2java]        http.proxyPassword=null
[axis-wsdl2java]        socks.proxyHost=null
[axis-wsdl2java]        socks.proxyPort=null
[axis-wsdl2java] java.lang.NullPointerException
[axis-wsdl2java]        at org.apache.axis.wsdl.symbolTable.SymbolTable.addMIMETypes(SymbolTable.java:2864)
[axis-wsdl2java]        at org.apache.axis.wsdl.symbolTable.SymbolTable.fillInBindingInfo(SymbolTable.java:2544)
[axis-wsdl2java]        at org.apache.axis.wsdl.symbolTable.SymbolTable.populateBindings(SymbolTable.java:2464)
[axis-wsdl2java]        at org.apache.axis.wsdl.symbolTable.SymbolTable.populate(SymbolTable.java:731)
[axis-wsdl2java]        at org.apache.axis.wsdl.symbolTable.SymbolTable.add(SymbolTable.java:531)
[axis-wsdl2java]        at org.apache.axis.wsdl.symbolTable.SymbolTable.populate(SymbolTable.java:506)
[axis-wsdl2java]        at org.apache.axis.wsdl.symbolTable.SymbolTable.populate(SymbolTable.java:483)
[axis-wsdl2java]        at org.apache.axis.wsdl.gen.Parser$WSDLRunnable.run(Parser.java:356)
[axis-wsdl2java]        at java.lang.Thread.run(Thread.java:534)

Any idea why Axis is failing on what looks like a legitimate WSDL?

----------
Anne Thomas Manes responds:
Btw -- WS-I just published the Attachments Profile [1].

Here's an example of a correct WSDL description for document/literal binding. Note that Axis
should not be using the apachesoap:dataHandler datatype. Also note that even though the binding
is doc/literal, the MIME attachment message parts must be defined as types (type="xsd:base64binary")
rather than as elements.

<?xml version="1.0" encoding="utf-8" ?>
<wsdl:definitions xmlns:types="http://example.com/mimetypes"
         xmlns:ref="http://ws-i.org/profiles/basic/1.1/xsd"
         xmlns:xsd="http://www.w3.org/2001/XMLSchema"
         xmlns:soapbind="http://schemas.xmlsoap.org/wsdl/soap/"
         xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
         xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
         targetNamespace="http://example.com/mimewsdl"
         xmlns:tns="http://example.com/mimewsdl">

  <wsdl:types>
    <xsd:schema targetNamespace="http://example.com/mimetypes"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema">

      <xsd:import namespace="http://ws-i.org/profiles/basic/1.1/xsd"
/>
      <xsd:element name="ClaimDetail" type="types:ClaimDetailType"/>
      <xsd:complexType name="ClaimDetailType">
        <xsd:sequence>
          <xsd:element name="Name" type="xsd:string"/>
          <xsd:element name="ClaimForm" type="ref:swaRef"/>
        </xsd:sequence>
      </xsd:complexType>
      <xsd:element name="ClaimRefNo" type="xsd:string"/>
    </xsd:schema>
  </wsdl:types>

  <wsdl:message name="ClaimIn">
    <wsdl:part name="body" element="types:ClaimDetail"/>
    <wsdl:part name="ClaimPhoto" type="xsd:base64Binary"/>
  </wsdl:message>

  <wsdl:message name="ClaimOut">
    <wsdl:part name="out" element="types:ClaimRefNo"/>
  </wsdl:message>

  <wsdl:portType name="ClaimPortType">
    <wsdl:operation name="SendClaim">
      <wsdl:input message="tns:ClaimIn"/>
      <wsdl:output message="tns:ClaimOut"/>
    </wsdl:operation>
  </wsdl:portType>

  <wsdl:binding name="ClaimBinding" type="tns:ClaimPortType">
    <soapbind:binding style="document"
             transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="SendClaim">
      <soapbind:operation soapAction="http://example.com/soapaction"/>
      <wsdl:input>
        <mime:multipartRelated>
          <mime:part>
            <soapbind:body parts="body" use="literal"/>
          </mime:part>
          <mime:part>
            <mime:content part="ClaimPhoto" type="image/jpeg"/>
          </mime:part>
        </mime:multipartRelated>
      </wsdl:input>
      <wsdl:output>
        <soapbind:body use="literal" />
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
</wsdl:definitions>


[1] http://www.ws-i.org/Profiles/AttachmentsProfile-1.0-2004-08-24.html


---------------------------------------------------------------------
JIRA INFORMATION:
This message is automatically generated by JIRA.

If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa

If you want more information on JIRA, or have a bug to report see:
   http://www.atlassian.com/software/jira


Mime
View raw message