/* * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ import javax.xml.soap.AttachmentPart; import javax.xml.soap.MessageFactory; import javax.xml.soap.Name; import javax.xml.soap.SOAPEnvelope; import javax.xml.soap.SOAPException; import javax.xml.soap.SOAPMessage; import javax.xml.transform.stream.StreamSource; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.Iterator; /* * @test * @modules java.xml.ws * @run main XmlTest * @summary tests JAF DataHandler can be instantiated; test serialize and * deserialize SOAP message containing xml attachment */ public class XmlTest { public void test() throws Exception { File file = new File("message.xml"); file.deleteOnExit(); MessageFactory mf = MessageFactory.newInstance(); SOAPMessage msg = createMessage(mf); // Save the soap message to file try (FileOutputStream sentFile = new FileOutputStream(file)) { msg.writeTo(sentFile); } // See if we get the image object back try (FileInputStream fin = new FileInputStream(file)) { SOAPMessage newMsg = mf.createMessage(msg.getMimeHeaders(), fin); newMsg.writeTo(new ByteArrayOutputStream()); Iterator<?> i = newMsg.getAttachments(); while (i.hasNext()) { AttachmentPart att = (AttachmentPart) i.next(); Object obj = att.getContent(); if (!(obj instanceof StreamSource)) { fail("Got incorrect attachment type [" + obj.getClass() + "], " + "expected [javax.xml.transform.stream.StreamSource]"); } } } } private SOAPMessage createMessage(MessageFactory mf) throws SOAPException, IOException { SOAPMessage msg = mf.createMessage(); SOAPEnvelope envelope = msg.getSOAPPart().getEnvelope(); Name name = envelope.createName("hello", "ex", "http://example.com"); envelope.getBody().addChildElement(name).addTextNode("THERE!"); String s = "<root><hello>THERE!</hello></root>"; AttachmentPart ap = msg.createAttachmentPart( new StreamSource(new ByteArrayInputStream(s.getBytes())), "text/xml" ); msg.addAttachmentPart(ap); msg.saveChanges(); return msg; } private void fail(String s) { throw new RuntimeException(s); } public static void main(String[] args) throws Exception { new XmlTest().test(); } }