You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by "Kevin L. Stern (JIRA)" <ji...@apache.org> on 2010/12/10 17:17:00 UTC
[jira] Updated: (AXIS2-4909) Simple MTOM web service no longer
works due to missing closing MIME boundary.
[ https://issues.apache.org/jira/browse/AXIS2-4909?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Kevin L. Stern updated AXIS2-4909:
----------------------------------
Attachment: mtom.zip
A sample project to demonstrate the issue.
> 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
> Affects Versions: 1.5.3
> Reporter: Kevin L. Stern
> Priority: Blocker
> 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).
> (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="<0....@apache.org>"; 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: <0....@apache.org>
> <?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:1.e2fc5fe8cdf5bf17020e924dc81747527cb3fcbb77f7dec5@apache.org" /></ns1:return></ns1:BinaryData></soapenv:Body></soapenv:Envelope>
> e1
> --MIMEBoundary_c2fc5fe8cdf5bf17020e924dc81747527cb3fcbb77f7dec5
> Content-Type: application/binary
> Content-Transfer-Encoding: binary
> Content-ID: <1....@apache.org>
>
> 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: java-dev-unsubscribe@axis.apache.org
For additional commands, e-mail: java-dev-help@axis.apache.org