/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved. * * The contents of this file are subject to the terms of either the GNU * General Public License Version 2 only ("GPL") or the Common Development * and Distribution License("CDDL") (collectively, the "License"). You * may not use this file except in compliance with the License. You can * obtain a copy of the License at * http://glassfish.java.net/public/CDDL+GPL_1_1.html * or packager/legal/LICENSE.txt. See the License for the specific * language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each * file and include the License file at packager/legal/LICENSE.txt. * * GPL Classpath Exception: * Oracle designates this particular file as subject to the "Classpath" * exception as provided by Oracle in the GPL Version 2 section of the License * file that accompanied this code. * * Modifications: * If applicable, add the following below the License Header, with the fields * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyright [year] [name of copyright owner]" * * Contributor(s): * If you wish your version of this file to be governed by only the CDDL or * only the GPL Version 2, indicate your decision by adding "[Contributor] * elects to include this software in this distribution under the [CDDL or GPL * Version 2] license." If you don't indicate a single choice of license, a * recipient has the option to distribute your version of this file under * either the CDDL, the GPL Version 2 or to extend the choice of license to * its licensees as provided above. However, if you add GPL Version 2 code * and therefore, elected the GPL Version 2 license, then the option applies * only if the new code is made subject to such option by the copyright * holder. */ package com.sun.xml.ws.test; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.lang.reflect.Method; import javax.xml.namespace.QName; import javax.xml.soap.MessageFactory; import javax.xml.soap.SOAPException; import javax.xml.stream.XMLStreamReader; import javax.xml.stream.XMLStreamWriter; import org.jvnet.staxex.Base64Data; import org.jvnet.staxex.XMLStreamReaderEx; import com.oracle.webservices.api.databinding.Databinding; import com.oracle.webservices.api.databinding.DatabindingFactory; import com.oracle.webservices.api.databinding.DatabindingModeFeature; import com.oracle.webservices.api.databinding.JavaCallInfo; import com.oracle.webservices.api.message.ContentType; import com.oracle.webservices.api.message.MessageContext; import com.sun.xml.stream.buffer.MutableXMLStreamBuffer; import com.sun.xml.stream.buffer.stax.StreamWriterBufferCreator; import com.sun.xml.ws.api.message.Attachment; import com.sun.xml.ws.api.message.AttachmentSet; import com.sun.xml.ws.api.message.Header; import com.sun.xml.ws.api.message.MessageContextFactory; import com.sun.xml.ws.api.message.Packet; import junit.framework.TestCase; public class MtomTest extends TestCase { static MessageFactory messageFactory; MessageContextFactory packetFactory = (MessageContextFactory) com.oracle.webservices.api.message.MessageContextFactory.createFactory(); DatabindingFactory dbf = DatabindingFactory.newInstance(); String ns = "http://example.com/test"; Class<MtomSEI> sei = MtomSEI.class; Databinding dbE = dbf.createBuilder(sei, null).feature(new DatabindingModeFeature("eclipselink.jaxb")).serviceName(new QName(ns, "srv")).build(); Databinding dbG = dbf.createBuilder(sei, null).feature(new DatabindingModeFeature("glassfish.jaxb")).serviceName(new QName(ns, "srv")).build(); static MtomBean b = new MtomBean(); static { b.setBinary1("fkldhafkdahfkdhfkhasdkfhldashfi9pweqryiweqyriqelhfklasdhfkldashflksdah".getBytes()); b.setBinary2("epriepireroerupequreopruopweuqrowequrpoweqrupweqrweqrweuqrweqrwerwerer".getBytes()); try { messageFactory = MessageFactory.newInstance(); } catch (SOAPException e) { e.printStackTrace(); } } Object[] args = { b, b }; public void testOutboundJAXBMessageToOutput() throws Exception { // System.out.println("\r\n----------------- eclipselink.jaxb"); testOutboundJAXBMessageToOutput(dbE); // System.out.println();System.out.println();System.out.println(); // System.out.println("\r\n----------------- glassfish.jaxb"); testOutboundJAXBMessageToOutput(dbG); } private void testOutboundJAXBMessageToOutput(Databinding db) throws Exception { JavaCallInfo jci = db.createJavaCallInfo(findMethod(sei, "header"), args); { MessageContext mc = db.serializeRequest(jci); ; int count = 0; for ( Header h : ((Packet)mc).getInternalMessage().getHeaders().asList() ) { // System.out.println("~~~ header " + h); XMLStreamReader hr = h.readHeader(); while(hr.hasNext()) { int i = hr.next(); if (hr.isCharacters()) { assertEquals(org.jvnet.staxex.Base64Data.class,((XMLStreamReaderEx)hr).getPCDATA().getClass()); Base64Data b64 = (Base64Data)((XMLStreamReaderEx)hr).getPCDATA(); // System.out.println("~~~~~~~~~~~~~~~ header " + b64.getDataHandler()); // assertEquals(org.jvnet.staxex.Base64Data.class,((XMLStreamReaderEx)xr).getPCDATA().getClass()); count++; } } } XMLStreamReader xr = ((Packet)mc).getInternalMessage().readPayload(); while(xr.hasNext()) { int i = xr.next(); if (xr.isCharacters()) { assertEquals(org.jvnet.staxex.Base64Data.class,((XMLStreamReaderEx)xr).getPCDATA().getClass()); Base64Data b64 = (Base64Data)((XMLStreamReaderEx)xr).getPCDATA(); // System.out.println("----------------- b64 " + b64.getDataHandler()); // assertEquals(org.jvnet.staxex.Base64Data.class,((XMLStreamReaderEx)xr).getPCDATA().getClass()); count++; } } // for (Attachment a : ((Packet)mc).getMessage().getAttachments()) count++; assertEquals(4, count); } { MessageContext mc = db.serializeRequest(jci); // mc.writeTo(System.out); } // System.out.println("\r\n----------------- saaj"); // { // MessageContext mc = db.serializeRequest(jci); // mc.getAsSOAPMessage().writeTo(System.out); // } } public void XtestNamespaceAsLastItem1() throws Exception { MutableXMLStreamBuffer xsb = new MutableXMLStreamBuffer(); XMLStreamWriter w = xsb.createFromXMLStreamWriter();//new StreamWriterBufferCreator(xsb); w.writeStartElement("p1","tag","ns1"); w.writeAttribute("a","x"); w.writeNamespace("p","ns"); w.writeEndElement(); XMLStreamReader xr = xsb.readAsXMLStreamReader(); boolean tested = false; while(xr.hasNext()) { int i = xr.next(); // if (xr.isStartElement() && xr.getLocalName().equals("tag")) { // assertEquals(1,xr.getAttributeCount()); // assertEquals("ns",xr.getNamespaceURI("p")); // tested = true; // } } // assertTrue(tested); } // public void xtestInboundStreamMessageToJAXB() throws Exception { // MessageContext mc = db.serializeRequest(jci); // ByteArrayOutputStream bao = new ByteArrayOutputStream(); // ContentType ct = mc.writeTo(bao); // String contentType = ct.getContentType(); // byte[] bytes = bao.toByteArray(); // System.out.println("testInboundStreamMessageToJAXB message\r\n " + new String(bytes)); // MessageContext mc_ = packetFactory.createContext(new ByteArrayInputStream(bytes), contentType); // JavaCallInfo reqCall = db.deserializeRequest(mc_); // MtomBean b = (MtomBean)reqCall.getParameters()[0]; // System.out.println("testInboundStreamMessageToJAXB message result " + b.getBinary1().length); // System.out.println("testInboundStreamMessageToJAXB message result " + b.getBinary2().length); // } static public Method findMethod(Class<?> c, String n) { for (Method m :c.getMethods()) if (m.getName().equals(n)) return m; return null; } }