[ 
https://issues.apache.org/jira/browse/AXIS2-4909?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Andreas Veithen updated AXIS2-4909:
-----------------------------------

          Component/s: transports
    Affects Version/s: 1.5.2

> Simple MTOM web service no longer works due to missing closing MIME boundary.
> -----------------------------------------------------------------------------
>
>                 Key: AXIS2-4909
>                 URL: https://issues.apache.org/jira/browse/AXIS2-4909
>             Project: Axis2
>          Issue Type: Bug
>          Components: transports
>    Affects Versions: 1.5.3, 1.5.2
>            Reporter: Kevin L. Stern
>            Assignee: Andreas Veithen
>             Fix For: 1.5.4
>
>         Attachments: mtom.zip
>
>
> 1) Use wsdl2java to generate service stubs from a simple wsdl (A), modify 
> axis2.xml to turn MTOM on "<parameter name="enableMTOM">true</parameter>".
> 2) In generated WebServiceSkeleton change getBinaryData to return some data 
> (B).
> 3) Use maven/pom file (C) to build a war, deploy war to tomcat.
> 4) Generate a simple client to call the service (D).
> You will get the following exception on the client
> java.io.IOException: End of Stream, but boundary not found
>       at 
> org.apache.axiom.attachments.BoundaryPushbackInputStream.read(BoundaryPushbackInputStream.java:258)
>       at 
> org.apache.axiom.attachments.BoundaryPushbackInputStream.read(BoundaryPushbackInputStream.java:141)
>       at 
> org.apache.axiom.attachments.MIMEBodyPartInputStream.read(MIMEBodyPartInputStream.java:101)
>       at 
> org.apache.axiom.attachments.impl.PartFactory.readHeaders(PartFactory.java:192)
>       at 
> org.apache.axiom.attachments.impl.PartFactory.createPart(PartFactory.java:95)
>       ... 15 more
> Because there is no closing MIME boundary in the server generated SOAP (E).  
> This does not occur with axis2 version 1.5.1.
> (A)
> <?xml version="1.0" encoding="UTF-8"?>
> <wsdl:definitions xmlns:tns="http://webservice.mtom";
>       xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/";
>       xmlns:http="http://schemas.xmlsoap.org/wsdl/http/";
>       xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/";
>       xmlns:xmime="http://www.w3.org/2005/05/xmlmime";
>       xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl";
>       xmlns:xsd="http://www.w3.org/2001/XMLSchema";
>       xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
>       xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
>       xmlns="http://schemas.xmlsoap.org/wsdl/";
>       targetNamespace="http://webservice.mtom";>
>       <wsdl:types>
>               <xsd:schema xmlns="http://schemas.xmlsoap.org/wsdl/";
>                       attributeFormDefault="qualified"
>                       elementFormDefault="qualified"
>                       targetNamespace="http://webservice.mtom";>
>                       <xsd:element name="BinaryData">
>                               <xsd:complexType>
>                                       <xsd:sequence>
>                                               <xsd:element minOccurs="0" 
> name="return" type="xsd:base64Binary" />
>                                       </xsd:sequence>
>                               </xsd:complexType>
>                       </xsd:element>
>               </xsd:schema>
>       </wsdl:types>
>       <wsdl:message name="getBinaryDataResponse">
>               <wsdl:part name="parameters" element="tns:BinaryData">
>               </wsdl:part>
>       </wsdl:message>
>       <wsdl:message name="getBinaryDataRequest">
>       </wsdl:message> 
>       <wsdl:portType name="WebServicePortType">
>               <wsdl:operation name="getBinaryData">
>                       <wsdl:input message="tns:getBinaryDataRequest"
>                               wsaw:Action="tns:getBinaryData">
>                       </wsdl:input>
>                       <wsdl:output message="tns:getBinaryDataResponse"
>                               wsaw:Action="tns:getBinaryDataResponse">
>                       </wsdl:output>
>               </wsdl:operation>
>       </wsdl:portType>
>       <wsdl:binding name="WebServiceSoap12Binding"
>               type="tns:WebServicePortType">
>               <soap12:binding style="document"
>                       transport="http://schemas.xmlsoap.org/soap/http"; />
>               <wsdl:operation name="getBinaryData">
>                       <soap12:operation soapAction="tns:getBinaryData"
>                               style="document" />
>                       <wsdl:input>
>                               <soap12:body use="literal" />
>                       </wsdl:input>
>                       <wsdl:output>
>                               <soap12:body use="literal" />
>                       </wsdl:output>
>               </wsdl:operation>
>       </wsdl:binding>
>       <wsdl:service name="WebService">
>               <wsdl:port name="WebServiceHttpSoap12Endpoint"
>                       binding="tns:WebServiceSoap12Binding">
>                       <soap12:address
>                               
> location="http://localhost:8080/WebService/services/WebService.WebServiceHttpSoap12Endpoint/";
>  />
>               </wsdl:port>
>       </wsdl:service>
> </wsdl:definitions>
> (B)
>       public mtom.webservice.BinaryData getBinaryData(
>       ) {
>               BinaryData param = new BinaryData();
>               DataHandler dh = new DataHandler(new DataSource() {
>                       private byte[] bytes = new byte[] { 1, 2, 3, 4, 5, 6, 
> 7, 8, 9, 10 };
>                       @Override
>                       public String getContentType() {
>                               return "application/binary";
>                       }
>                       @Override
>                       public InputStream getInputStream() throws IOException {
>                               return new ByteArrayInputStream(bytes);
>                       }
>                       @Override
>                       public String getName() {
>                               return "application/binary";
>                       }
>                       @Override
>                       public OutputStream getOutputStream() throws 
> IOException {
>                               return null;
>                       }
>               });
>               param.set_return(dh);
>               return param;
>       }
> (C)
> <project xmlns="http://maven.apache.org/POM/4.0.0"; 
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
> http://maven.apache.org/maven-v4_0_0.xsd";>
>       <modelVersion>4.0.0</modelVersion>
>       <groupId>org.stern</groupId>
>       <artifactId>WebService</artifactId>
>       <packaging>war</packaging>
>       <version>0.1-SNAPSHOT</version>
>       <build>
>               <plugins>
>                       <plugin>
>                               <groupId>org.apache.maven.plugins</groupId>
>                               <artifactId>maven-compiler-plugin</artifactId>
>                               <configuration>
>                                       <source>1.6</source>
>                                       <target>1.6</target>
>                               </configuration>
>                       </plugin>
>                       <plugin>
>                               <groupId>org.apache.maven.plugins</groupId>
>                               <artifactId>maven-war-plugin</artifactId>
>                               <version>2.0.2</version>
>                               <configuration>
>                                       <warName>WebService</warName>
>                                       
> <warSourceDirectory>src/main/webapp</warSourceDirectory>
>                                       
> <warSourceExcludes>**/*.log</warSourceExcludes>
>                               </configuration>
>                       </plugin>
>                       <plugin>
>                               <groupId>org.apache.maven.plugins</groupId>
>                               <artifactId>maven-dependency-plugin</artifactId>
>                               <executions>
>                                       <execution>
>                                               <id>copy-dependencies</id>
>                                               <phase>package</phase>
>                                               <goals>
>                                                       
> <goal>copy-dependencies</goal>
>                                               </goals>
>                                               <configuration>
>                                                       
> <outputDirectory>src/main/webapp/WEB-INF/lib</outputDirectory>
>                                               </configuration>
>                                       </execution>
>                               </executions>
>                       </plugin>
>                       <plugin>
>                               <groupId>org.apache.maven.plugins</groupId>
>                               <artifactId>maven-resources-plugin</artifactId>
>                               <configuration>
>                                       
> <outputDirectory>src/main/webapp/WEB-INF/classes</outputDirectory>
>                               </configuration>
>                       </plugin>
>               </plugins>
>       </build>
>       <dependencies>
>               <dependency>
>                       <groupId>junit</groupId>
>                       <artifactId>junit</artifactId>
>                       <version>4.7</version>
>                       <type>jar</type>
>                       <scope>compile</scope>
>               </dependency>
>               <dependency>
>                       <groupId>javax.activation</groupId>
>                       <artifactId>activation</artifactId>
>                       <version>1.1</version>
>                       <type>jar</type>
>                       <scope>compile</scope>
>               </dependency>
>               <dependency>
>                       <groupId>org.apache.ws.commons.axiom</groupId>
>                       <artifactId>axiom-api</artifactId>
>                       <version>1.2.10</version>
>                       <type>jar</type>
>                       <scope>compile</scope>
>               </dependency>
>               <dependency>
>                       <groupId>org.apache.ws.commons.axiom</groupId>
>                       <artifactId>axiom-dom</artifactId>
>                       <version>1.2.10</version>
>                       <type>jar</type>
>                       <scope>compile</scope>
>               </dependency>
>               <dependency>
>                       <groupId>org.apache.ws.commons.axiom</groupId>
>                       <artifactId>axiom-impl</artifactId>
>                       <version>1.2.10</version>
>                       <type>jar</type>
>                       <scope>compile</scope>
>               </dependency>
>               <dependency>
>                       <groupId>org.apache.axis2</groupId>
>                       <artifactId>axis2-adb</artifactId>
>                       <version>1.5.3</version>
>                       <type>jar</type>
>                       <scope>compile</scope>
>               </dependency>
>               <dependency>
>                       <groupId>org.apache.axis2</groupId>
>                       <artifactId>axis2-adb-codegen</artifactId>
>                       <version>1.5.3</version>
>                       <type>jar</type>
>                       <scope>compile</scope>
>               </dependency>
>               <dependency>
>                       <groupId>org.apache.axis2</groupId>
>                       <artifactId>axis2-ant-plugin</artifactId>
>                       <version>1.5.3</version>
>                       <type>maven-plugin</type>
>                       <scope>compile</scope>
>               </dependency>
>               <dependency>
>                       <groupId>org.apache.axis2</groupId>
>                       <artifactId>axis2-clustering</artifactId>
>                       <version>1.5.3</version>
>                       <type>jar</type>
>                       <scope>compile</scope>
>               </dependency>
>               <dependency>
>                       <groupId>org.apache.axis2</groupId>
>                       <artifactId>axis2-codegen</artifactId>
>                       <version>1.5.3</version>
>                       <type>jar</type>
>                       <scope>compile</scope>
>               </dependency>
>               <dependency>
>                       <groupId>org.apache.axis2</groupId>
>                       <artifactId>axis2-corba</artifactId>
>                       <version>1.5.3</version>
>                       <type>jar</type>
>                       <scope>compile</scope>
>               </dependency>
>               <dependency>
>                       <groupId>org.apache.axis2</groupId>
>                       <artifactId>axis2-fastinfoset</artifactId>
>                       <version>1.5.3</version>
>                       <type>jar</type>
>                       <scope>compile</scope>
>               </dependency>
>               <dependency>
>                       <groupId>org.apache.axis2</groupId>
>                       <artifactId>axis2-java2wsdl</artifactId>
>                       <version>1.5.3</version>
>                       <type>jar</type>
>                       <scope>compile</scope>
>               </dependency>
>               <dependency>
>                       <groupId>org.apache.axis2</groupId>
>                       <artifactId>axis2-jaxbri</artifactId>
>                       <version>1.5.3</version>
>                       <type>jar</type>
>                       <scope>compile</scope>
>               </dependency>
>               <dependency>
>                       <groupId>org.apache.axis2</groupId>
>                       <artifactId>axis2-jibx</artifactId>
>                       <version>1.5.3</version>
>                       <type>jar</type>
>                       <scope>compile</scope>
>               </dependency>
>               <dependency>
>                       <groupId>org.apache.axis2</groupId>
>                       <artifactId>axis2-json</artifactId>
>                       <version>1.5.3</version>
>                       <type>jar</type>
>                       <scope>compile</scope>
>               </dependency>
>               <dependency>
>                       <groupId>org.apache.axis2</groupId>
>                       <artifactId>axis2-kernel</artifactId>
>                       <version>1.5.3</version>
>                       <type>jar</type>
>                       <scope>compile</scope>
>               </dependency>
>               <dependency>
>                       <groupId>org.apache.axis2</groupId>
>                       <artifactId>axis2-metadata</artifactId>
>                       <version>1.5.3</version>
>                       <type>jar</type>
>                       <scope>compile</scope>
>               </dependency>
>               <dependency>
>                       <groupId>org.apache.axis2</groupId>
>                       <artifactId>axis2-mtompolicy</artifactId>
>                       <version>1.5.3</version>
>                       <type>jar</type>
>                       <scope>compile</scope>
>               </dependency>
>               <dependency>
>                       <groupId>org.apache.axis2</groupId>
>                       <artifactId>axis2-saaj</artifactId>
>                       <version>1.5.3</version>
>                       <type>jar</type>
>                       <scope>compile</scope>
>               </dependency>
>               <dependency>
>                       <groupId>org.apache.axis2</groupId>
>                       <artifactId>axis2-soapmonitor-servlet</artifactId>
>                       <version>1.5.3</version>
>                       <type>jar</type>
>                       <scope>compile</scope>
>               </dependency>
>               <dependency>
>                       <groupId>org.apache.axis2</groupId>
>                       <artifactId>axis2-spring</artifactId>
>                       <version>1.5.3</version>
>                       <type>jar</type>
>                       <scope>compile</scope>
>               </dependency>
>               <dependency>
>                       <groupId>org.apache.axis2</groupId>
>                       <artifactId>axis2-transport-http</artifactId>
>                       <version>1.5.3</version>
>                       <scope>compile</scope>
>               </dependency>
>               <dependency>
>                       <groupId>org.apache.axis2</groupId>
>                       <artifactId>axis2-transport-local</artifactId>
>                       <version>1.5.3</version>
>                       <scope>compile</scope>
>               </dependency>
>               <dependency>
>                       <groupId>org.apache.axis2</groupId>
>                       <artifactId>axis2-xmlbeans</artifactId>
>                       <version>1.5.3</version>
>                       <type>jar</type>
>                       <scope>compile</scope>
>               </dependency>
>               <dependency>
>                       <groupId>org.apache.httpcomponents</groupId>
>                       <artifactId>httpcore</artifactId>
>                       <version>4.0</version>
>                       <type>jar</type>
>                       <scope>compile</scope>
>               </dependency>
>               <dependency>
>                       <groupId>log4j</groupId>
>                       <artifactId>log4j</artifactId>
>                       <version>1.2.15</version>
>                       <type>jar</type>
>                       <scope>compile</scope>
>                       <exclusions>
>                               <exclusion>
>                                       <groupId>com.sun.jdmk</groupId>
>                                       <artifactId>jmxtools</artifactId>
>                               </exclusion>
>                               <exclusion>
>                                       <groupId>com.sun.jmx</groupId>
>                                       <artifactId>jmxri</artifactId>
>                               </exclusion>
>                               <exclusion>
>                                       <groupId>javax.jms</groupId>
>                                       <artifactId>jms</artifactId>
>                               </exclusion>
>                       </exclusions>
>               </dependency>
>               <dependency>
>                       <groupId>wsdl4j</groupId>
>                       <artifactId>wsdl4j</artifactId>
>                       <version>1.6.2</version>
>                       <type>jar</type>
>                       <scope>compile</scope>
>               </dependency>
>               <dependency>
>                       <groupId>org.apache.ws.commons.schema</groupId>
>                       <artifactId>XmlSchema</artifactId>
>                       <version>1.4.3</version>
>                       <type>jar</type>
>                       <scope>compile</scope>
>               </dependency>
>       </dependencies>
> </project>
> (D)
> package webservice.client;
> import java.io.InputStream;
> import mtom.webservice.BinaryData;
> import mtom.webservice.WebServiceStub;
> public class Main {
>       public static void main(String[] args) throws Exception {
>               WebServiceStub stub = new 
> WebServiceStub("http://localhost:8080/WebService/services/WebService.WebServiceHttpSoap12Endpoint/";);
>               BinaryData result = stub.getBinaryData();
>               InputStream is = result.get_return().getInputStream();
>               int next;
>               while ((next = is.read()) != -1) {
>                       System.out.println(next);
>               }
>       }
> }
> (E)
> HTTP/1.1 200 OK
> Server: Apache-Coyote/1.1
> Content-Type: multipart/related; 
> boundary="MIMEBoundary_c2fc5fe8cdf5bf17020e924dc81747527cb3fcbb77f7dec5"; 
> type="application/xop+xml"; 
> start="<[email protected]>"; 
> start-info="application/soap+xml"; action="tns:getBinaryDataResponse"
> Transfer-Encoding: chunked
> Date: Fri, 10 Dec 2010 15:53:52 GMT
> 289
> --MIMEBoundary_c2fc5fe8cdf5bf17020e924dc81747527cb3fcbb77f7dec5
> Content-Type: application/xop+xml; charset=UTF-8; type="application/soap+xml"
> Content-Transfer-Encoding: binary
> Content-ID: <[email protected]>
> <?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope 
> xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope";><soapenv:Body><ns1:BinaryData
>  xmlns:ns1="http://webservice.mtom";><ns1:return><xop:Include 
> xmlns:xop="http://www.w3.org/2004/08/xop/include"; 
> href="cid:[email protected]" 
> /></ns1:return></ns1:BinaryData></soapenv:Body></soapenv:Envelope>
> e1
> --MIMEBoundary_c2fc5fe8cdf5bf17020e924dc81747527cb3fcbb77f7dec5
> Content-Type: application/binary
> Content-Transfer-Encoding: binary
> Content-ID: <[email protected]>
>       
> 0

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to