package com.sun.xml.ws.api.message; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import javax.xml.soap.SOAPMessage; import javax.xml.ws.WebServiceFeature; import javax.xml.ws.soap.MTOMFeature; import org.w3c.dom.Node; import com.sun.xml.ws.api.BindingID; import com.sun.xml.ws.binding.BindingImpl; import junit.framework.TestCase; public class PacketTest extends TestCase { /** * Tests that a server response Packet with MTOM feature, but * decoded from an InputStream with a user specified non-MTOM * content type, does NOT use MTOM when re-encoded * @throws Exception */ public void testEncodeDecodedPacketMtom() throws Exception { String msg = "<?xml version='1.0' encoding='UTF-8'?>" + "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">" + "<soapenv:Body><soapenv:Fault>" + "<faultcode>soapenv:Server</faultcode>" + "<faultstring>ABC-380001:Internal Server Error</faultstring>" + "<detail><con:fault xmlns:con=\"http://www.bea.com/wli/sb/context\">" + "<con:errorCode>ABC-380001</con:errorCode>" + "<con:reason>Internal Server Error</con:reason>" + "<con:location><con:node>RouteNode1</con:node><con:path>response-pipeline</con:path></con:location>" + "</con:fault></detail>" + "</soapenv:Fault></soapenv:Body></soapenv:Envelope>"; WebServiceFeature[] features = {new MTOMFeature(true, 0)}; MessageContextFactory mcf = new MessageContextFactory(features); Packet fakeRequest = (Packet) mcf.createContext(); Packet p = (Packet) mcf.createContext(new ByteArrayInputStream(msg.getBytes()), "text/xml"); fakeRequest.relateServerResponse(p, null, null, BindingImpl.create(BindingID.SOAP11_HTTP, features)); ByteArrayOutputStream bos = new ByteArrayOutputStream(); p.writeTo(bos); String writtenMsg = new String(bos.toByteArray()); System.out.println(writtenMsg); assertEquals("text/xml", p.getContentType().getContentType()); //try reading the message as a soap message with text/xml - this should succeed //in parsing the message Packet reReadPacket = (Packet) mcf.createContext(new ByteArrayInputStream(writtenMsg.getBytes()), "text/xml"); SOAPMessage soap = reReadPacket.getAsSOAPMessage(); Node bodyChild = soap.getSOAPBody().getFirstChild(); assertEquals("Fault", bodyChild.getLocalName()); } }