Return-Path: X-Original-To: apmail-camel-dev-archive@www.apache.org Delivered-To: apmail-camel-dev-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 61055C489 for ; Fri, 11 May 2012 03:58:34 +0000 (UTC) Received: (qmail 23789 invoked by uid 500); 11 May 2012 03:58:34 -0000 Delivered-To: apmail-camel-dev-archive@camel.apache.org Received: (qmail 23498 invoked by uid 500); 11 May 2012 03:58:31 -0000 Mailing-List: contact dev-help@camel.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@camel.apache.org Delivered-To: mailing list dev@camel.apache.org Received: (qmail 23451 invoked by uid 99); 11 May 2012 03:58:29 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 11 May 2012 03:58:29 +0000 X-ASF-Spam-Status: No, hits=-0.7 required=5.0 tests=RCVD_IN_DNSWL_LOW,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: domain of claus.ibsen@gmail.com designates 209.85.215.45 as permitted sender) Received: from [209.85.215.45] (HELO mail-lpp01m010-f45.google.com) (209.85.215.45) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 11 May 2012 03:58:23 +0000 Received: by lahc1 with SMTP id c1so1693594lah.32 for ; Thu, 10 May 2012 20:58:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :content-type:content-transfer-encoding; bh=7zvnxwIuH8aimU93aP9VeutJA1o2gzJpnxGhJBr6eAg=; b=gTfyWEdKMpuqs/02gTsA7Au80rGnF93b4mK+19OssrAw7j9/Cdy+U3d9DY1Be8R9BC IPvlea2kYx2FWgcAEDbpXTthReRIXpHim0Acf/1rn/xJNevYe4t0fLPhAilrNgikX3LW O+I0vwP47EArvWGr/nWQCdcS61wya1bpxf6b/nJSv4nt/FH0Ld1soXYqpv6a143bL5m/ KM9l6iWKi8AvbMco5yiCNbowyxKVx8rwuMeQtNVj9I1JYkWVGF5LvBq5SuaCvbavk8fd GWhqz4ySijFxD8sUVjUAPFQuiRqhtPekbucbH2Y/RU/ZPoRri8J5TipCVpPhnk+iSDac 6KQg== Received: by 10.112.24.103 with SMTP id t7mr2967999lbf.22.1336708683196; Thu, 10 May 2012 20:58:03 -0700 (PDT) MIME-Version: 1.0 Received: by 10.112.146.7 with HTTP; Thu, 10 May 2012 20:57:42 -0700 (PDT) In-Reply-To: <20120510191526.E863C238890B@eris.apache.org> References: <20120510191526.E863C238890B@eris.apache.org> From: Claus Ibsen Date: Fri, 11 May 2012 05:57:42 +0200 Message-ID: Subject: Re: svn commit: r1336836 - in /camel/trunk/components/camel-jaxb/src: main/java/org/apache/camel/converter/jaxb/JaxbDataFormat.java test/java/org/apache/camel/converter/jaxb/JaxbDataFormatMultipleNamespacesTest.java To: dev@camel.apache.org Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Morning guys Christian I noticed that you import a com.sun package. +import com.sun.xml.bind.marshaller.NamespacePrefixMapper; Will this not be problems for people using IBM JVMs etc? I would normally discourage against using com.sun packages, especially in camel-core. Maybe there is an interface for the mapper? Or we could create an interface, and allow people to plugin the SUN if they configure that themselves etc. Or maybe we can use reflection to load the mapper class or something? Just so at least the code can compile on IBM JDKs and run there. And I wonder about OpenJDK as well? Do they carry the com.sun classes as we= ll? On Thu, May 10, 2012 at 9:15 PM, wrote: > Author: cmueller > Date: Thu May 10 19:15:26 2012 > New Revision: 1336836 > > URL: http://svn.apache.org/viewvc?rev=3D1336836&view=3Drev > Log: > CAMEL-5267: Improve camel-jaxb to be able to set a custom NameSpacePrefix= Mapper > > Modified: > =A0 =A0camel/trunk/components/camel-jaxb/src/main/java/org/apache/camel/c= onverter/jaxb/JaxbDataFormat.java > =A0 =A0camel/trunk/components/camel-jaxb/src/test/java/org/apache/camel/c= onverter/jaxb/JaxbDataFormatMultipleNamespacesTest.java > > Modified: camel/trunk/components/camel-jaxb/src/main/java/org/apache/came= l/converter/jaxb/JaxbDataFormat.java > URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jaxb/src/m= ain/java/org/apache/camel/converter/jaxb/JaxbDataFormat.java?rev=3D1336836&= r1=3D1336835&r2=3D1336836&view=3Ddiff > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > --- camel/trunk/components/camel-jaxb/src/main/java/org/apache/camel/conv= erter/jaxb/JaxbDataFormat.java (original) > +++ camel/trunk/components/camel-jaxb/src/main/java/org/apache/camel/conv= erter/jaxb/JaxbDataFormat.java Thu May 10 19:15:26 2012 > @@ -43,6 +43,8 @@ import org.apache.camel.util.ObjectHelpe > =A0import org.slf4j.Logger; > =A0import org.slf4j.LoggerFactory; > > +import com.sun.xml.bind.marshaller.NamespacePrefixMapper; > + > =A0/** > =A0* A data format ({@link DataFormat}) > =A0* using JAXB2 to marshal to and from XML > @@ -64,6 +66,7 @@ public class JaxbDataFormat extends Serv > =A0 =A0 private QName partNamespace; > =A0 =A0 private String partClass; > =A0 =A0 private Class partialClass; > + =A0 =A0private NamespacePrefixMapper nameSpacePrefixMapper; > > =A0 =A0 private TypeConverter typeConverter; > > @@ -82,6 +85,9 @@ public class JaxbDataFormat extends Serv > =A0 =A0 =A0 =A0 try { > =A0 =A0 =A0 =A0 =A0 =A0 // must create a new instance of marshaller as it= s not thread safe > =A0 =A0 =A0 =A0 =A0 =A0 Marshaller marshaller =3D getContext().createMars= haller(); > + =A0 =A0 =A0 =A0 =A0 =A0if (nameSpacePrefixMapper !=3D null) { > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0marshaller.setProperty("com.sun.xml.bind= .namespacePrefixMapper", nameSpacePrefixMapper); > + =A0 =A0 =A0 =A0 =A0 =A0} > =A0 =A0 =A0 =A0 =A0 =A0 if (isPrettyPrint()) { > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 marshaller.setProperty(Marshaller.JAXB_FO= RMATTED_OUTPUT, Boolean.TRUE); > =A0 =A0 =A0 =A0 =A0 =A0 } > @@ -244,6 +250,14 @@ public class JaxbDataFormat extends Serv > =A0 =A0 public void setCamelContext(CamelContext camelContext) { > =A0 =A0 =A0 =A0 this.camelContext =3D camelContext; > =A0 =A0 } > + > + =A0 =A0public NamespacePrefixMapper getNameSpacePrefixMapper() { > + =A0 =A0 =A0 =A0return nameSpacePrefixMapper; > + =A0 =A0} > + > + =A0 =A0public void setNameSpacePrefixMapper(NamespacePrefixMapper nameS= pacePrefixMapper) { > + =A0 =A0 =A0 =A0this.nameSpacePrefixMapper =3D nameSpacePrefixMapper; > + =A0 =A0} > > =A0 =A0 @Override > =A0 =A0 protected void doStart() throws Exception { > @@ -287,5 +301,4 @@ public class JaxbDataFormat extends Serv > =A0 =A0 protected Unmarshaller createUnmarshaller() throws JAXBException = { > =A0 =A0 =A0 =A0 return getContext().createUnmarshaller(); > =A0 =A0 } > - > =A0} > > Modified: camel/trunk/components/camel-jaxb/src/test/java/org/apache/came= l/converter/jaxb/JaxbDataFormatMultipleNamespacesTest.java > URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jaxb/src/t= est/java/org/apache/camel/converter/jaxb/JaxbDataFormatMultipleNamespacesTe= st.java?rev=3D1336836&r1=3D1336835&r2=3D1336836&view=3Ddiff > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > --- camel/trunk/components/camel-jaxb/src/test/java/org/apache/camel/conv= erter/jaxb/JaxbDataFormatMultipleNamespacesTest.java (original) > +++ camel/trunk/components/camel-jaxb/src/test/java/org/apache/camel/conv= erter/jaxb/JaxbDataFormatMultipleNamespacesTest.java Thu May 10 19:15:26 20= 12 > @@ -26,6 +26,8 @@ import org.apache.camel.example.Order; > =A0import org.apache.camel.test.junit4.CamelTestSupport; > =A0import org.junit.Test; > > +import com.sun.xml.bind.marshaller.NamespacePrefixMapper; > + > =A0public class JaxbDataFormatMultipleNamespacesTest extends CamelTestSup= port { > > =A0 =A0 @EndpointInject(uri =3D "mock:marshall") > @@ -59,6 +61,35 @@ public class JaxbDataFormatMultipleNames > =A0 =A0 =A0 =A0 assertTrue(payload.contains("city>Sulzbach =A0 =A0 =A0 =A0 assertTrue(payload.contains("order>")); > =A0 =A0 } > + > + =A0 =A0@Test > + =A0 =A0public void testMarshallWithNamespacePrefixMapper() throws Excep= tion { > + =A0 =A0 =A0 =A0mockMarshall.expectedMessageCount(1); > + > + =A0 =A0 =A0 =A0Order order =3D new Order(); > + =A0 =A0 =A0 =A0order.setId("1"); > + =A0 =A0 =A0 =A0Address address =3D new Address(); > + =A0 =A0 =A0 =A0address.setStreet("Main Street"); > + =A0 =A0 =A0 =A0address.setStreetNumber("3a"); > + =A0 =A0 =A0 =A0address.setZip("65843"); > + =A0 =A0 =A0 =A0address.setCity("Sulzbach"); > + =A0 =A0 =A0 =A0order.setAddress(address); > + =A0 =A0 =A0 =A0template.sendBody("direct:marshallWithNamespacePrefixMap= per", order); > + > + =A0 =A0 =A0 =A0assertMockEndpointsSatisfied(); > + > + =A0 =A0 =A0 =A0String payload =3D mockMarshall.getExchanges().get(0).ge= tIn().getBody(String.class); > + =A0 =A0 =A0 =A0assertTrue(payload.startsWith("")); > + =A0 =A0 =A0 =A0assertTrue(payload.contains("")); > + =A0 =A0 =A0 =A0assertTrue(payload.contains("1")); > + =A0 =A0 =A0 =A0assertTrue(payload.contains("")); > + =A0 =A0 =A0 =A0assertTrue(payload.contains("Main Street= ")); > + =A0 =A0 =A0 =A0assertTrue(payload.contains("3a")); > + =A0 =A0 =A0 =A0assertTrue(payload.contains("65843")); > + =A0 =A0 =A0 =A0assertTrue(payload.contains("Sulzbach")); > + =A0 =A0 =A0 =A0assertTrue(payload.contains("")); > + =A0 =A0 =A0 =A0assertTrue(payload.contains("")); > + =A0 =A0} > > =A0 =A0 @Test > =A0 =A0 public void testUnarshallMultipleNamespaces() throws Exception { > @@ -87,9 +118,25 @@ public class JaxbDataFormatMultipleNames > =A0 =A0 =A0 =A0 =A0 =A0 public void configure() throws Exception { > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 JaxbDataFormat jaxbDataFormat =3D new Jax= bDataFormat(JAXBContext.newInstance(Order.class, Address.class)); > > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0JaxbDataFormat jaxbDataFormatWithNamespa= cePrefixMapper =3D new JaxbDataFormat(JAXBContext.newInstance(Order.class, = Address.class)); > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0jaxbDataFormatWithNamespacePrefixMapper.= setNameSpacePrefixMapper(new NamespacePrefixMapper() { > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0public String getPreferredPrefix= (String namespaceUri, String suggestion, boolean requirePrefix) { > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (namespaceUri.equals(= "http://www.camel.apache.org/jaxb/example/order/1")) { > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return "order"; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} else if (namespaceUri.= equals("http://www.camel.apache.org/jaxb/example/address/1")) { > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return "address"= ; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return "ns"; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0}); > + > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 from("direct:marshall") > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 .marshal(jaxbDataFormat) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 .to("mock:marshall"); > + > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0from("direct:marshallWithNamespacePrefix= Mapper") > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0.marshal(jaxbDataFormatWithNames= pacePrefixMapper) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0.to("mock:marshall"); > > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 from("direct:unmarshall") > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 .unmarshal(jaxbDataFormat= ) > > --=20 Claus Ibsen ----------------- CamelOne 2012 Conference, May 15-16, 2012: http://camelone.com FuseSource Email: cibsen@fusesource.com Web: http://fusesource.com Twitter: davsclaus, fusenews Blog: http://davsclaus.blogspot.com/ Author of Camel in Action: http://www.manning.com/ibsen/