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