Hi all,

I've a problem with getting a response from a web service to be MTOM'ed rather than inline base64-encoded. I've gone all over the web but without success. I've no problem MTOM'ing data as part of the request, but the client always sees inline data as observed by wire capture. No amount of @XmlMimeType annotation seems to make any difference, nor @MTOM nor @BindingType annotations.

My web service is very simple:
package testmtom;

import javax.activation.DataHandler;
import javax.jws.WebService;

@WebService
public interface Server {
    public DataHandler getResult();
}

and implementation too:


package testmtom;

import java.io.File;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.ejb.Stateless;
import javax.jws.WebService;
import javax.xml.bind.annotation.XmlMimeType;
import javax.xml.ws.soap.MTOM;

@Stateless
@MTOM(enabled=true)
@WebService(serviceName="mtomService",
endpointInterface="testmtom.Server",
targetNamespace="http://test.mtom/ns";)
public class ServerImpl implements Server {

    @Override
    public @XmlMimeType("*/*") DataHandler getResult() {
        return new DataHandler(
                new FileDataSource(
                        new File(
"/home/acassin/sequence-databases/uniprot-viridiplantae-11thApril2012.fa")));
    }

}


These files are too large for anything but MTOM (>100MB). The test program looks as follows:

public class serviceTest {
private final String url = "http://localhost:8080/testmtom/webservices/ServerImpl?wsdl";;

    @Test
    public void serviceTest() {
        try {
Service srv = Service.create(new URL(url), new QName("http://test.mtom/ns";, "mtomService"));
            Server client = srv.getPort(Server.class, new MTOMFeature());

            DataHandler dh = client.getResult();
            assertNotEquals(null, dh);
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

With an exception during processing of getResult() similar to:
Caused by: javax.xml.bind.UnmarshalException
 - with linked exception:
[com.ctc.wstx.exc.WstxParsingException: Text size limit (134217728) exceeded
 at [row,col {unknown-source}]: [1,142499672]]
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.handleStreamException(UnmarshallerImpl.java:436) at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:372) at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:349) at org.apache.cxf.jaxb.JAXBEncoderDecoder.doUnmarshal(JAXBEncoderDecoder.java:833) at org.apache.cxf.jaxb.JAXBEncoderDecoder.access$100(JAXBEncoderDecoder.java:101) at org.apache.cxf.jaxb.JAXBEncoderDecoder$2.run(JAXBEncoderDecoder.java:861)
    at java.security.AccessController.doPrivileged(Native Method)
at org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:859)
    ... 43 more
Caused by: com.ctc.wstx.exc.WstxParsingException: Text size limit (134217728) exceeded
 at [row,col {unknown-source}]: [1,142499672]
at com.ctc.wstx.sr.StreamScanner.constructWfcException(StreamScanner.java:606) at com.ctc.wstx.sr.StreamScanner.throwWfcException(StreamScanner.java:455)
    at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1124)
at com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(StAXStreamConnector.java:196) at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:370)
    ... 49 more


I've tried to set honor.jaxb.annotations in conf/system.properties but also no luck. I've looked at the tomee attachments web service example
but dont get what I am missing?

thanks in advance,

--
Andrew Cassin
[email protected]

Reply via email to