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 16:55:01 UTC

[jira] Created: (AXIS2-4909) Simple MTOM web service no longer works due to missing closing MIME boundary.

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


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


[jira] Updated: (AXIS2-4909) Simple MTOM web service no longer works due to missing closing MIME boundary.

Posted by "Kevin L. Stern (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/AXIS2-4909?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Kevin L. Stern updated AXIS2-4909:
----------------------------------

    Description: 
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="<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



  was:
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




> 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).  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="<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


[jira] Updated: (AXIS2-4909) Simple MTOM web service no longer works due to missing closing MIME boundary.

Posted by "Kevin L. Stern (JIRA)" <ji...@apache.org>.
     [ 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


[jira] Updated: (AXIS2-4909) Simple MTOM web service no longer works due to missing closing MIME boundary.

Posted by "Andreas Veithen (JIRA)" <ji...@apache.org>.
     [ 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="<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


[jira] Resolved: (AXIS2-4909) Simple MTOM web service no longer works due to missing closing MIME boundary.

Posted by "Andreas Veithen (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/AXIS2-4909?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Andreas Veithen resolved AXIS2-4909.
------------------------------------

    Resolution: Fixed

The root cause of this issue is that AxisServlet wraps the ServletOutputStream in a BufferedOutputStream but doesn't care to flush the BufferedOutputStream, and thus relies on the message formatter to do so. This however is not a requirement specified by the MessageFormatter interface and is also a difference with respect to other transports that manage the output stream properly.

In 1.5.1 this was not a problem because there was a call to OutputStream#flush() at the right place in Axiom. With the upgrade of the Axiom dependency in 1.5.2, this is no longer the case and the bug in AxisServlet becomes visible.

The issue in AxisServlet was solved on the trunk by r823960. I've merged that change to the 1.5 branch, and the fix will be available in 1.5.4-SNAPSHOT build #111.

> 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
>            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="<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


[jira] Updated: (AXIS2-4909) Simple MTOM web service no longer works due to missing closing MIME boundary.

Posted by "Andreas Veithen (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/AXIS2-4909?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

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

         Priority: Major  (was: Blocker)
    Fix Version/s: 1.5.4
         Assignee: Andreas Veithen

> 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
>            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="<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