The unmarshal("jxb") refers to a JaxbDataFormat defined in Spring
configuration :
<camelContext>
<routeBuilder ref="myBuilder"/>
<dataFormats>
<jaxb id="jxb" context="eu.diva.tis.api.domain.esb"/>
</dataFormats>
</camelContext>
And I've triple-checked that the context is correct and no other package
than the one being referenced is used. Note also that this DataFormat is
used with success during the unmarshalling operation :-( ???
I really don't have a clue why the createMethod cannot be found during
marshalling operations, but can be found during unmarshalling. Maybe I'm
using the wrong JAXB library ? But I'm using the standard set provided with
Fuse ESB 4.1 release candidate, so it should be OK ?
Stephen Gargan wrote:
>
> It could be that your route definition is incorrect, it should read
> jaxb not jxb. You could also try creating a JaxbDataFormat explicitly
> and use that in your route instead.
>
> e.g
>
> DataFormat jaxb = new JaxbDataFormat("org.apache.camel.example");
>
> from("direct:start").
> unmarshal(jaxb).
> to("mock:result");
>
>
> On Mon, Feb 22, 2010 at 9:49 PM, TheWinch
> <[email protected]> wrote:
>>
>> Hi people,
>>
>> I'm experiencing a curious problem with Camel JAXB. To make it short:
>> unmarshalling works correctly, but not marshalling.
>>
>> I have a route that receives a CxfPayload and unmarshals it to Java. It
>> works perfectly.
>> A second route has a processor that emits a Java payload, that must then
>> be
>> marshaled to XML -> I get the exception below.
>> Both payloads are in the same package, they are generated using JaxB
>> generation so they have the correct annotations.
>>
>> Route 1 (correct) :
>> from("file:/var/diva/crisis")
>> .unmarshal("jxb")
>> .to( "bean:crisisServiceImpl?method=createCrisis" );
>>
>> Route 2 (incorrect) :
>> from("direct:sendAck")
>> .to("log:cr-sendack1")
>> .marshal("jxb")
>> .to("log:cr-sendack2")
>>
>> The exception:
>> 22:42:28,531 | INFO | cr-sendack1 88 |
>> Exchange[BodyType:eu.diva.tis.api.ws.alert.alarmtypes.AlarmAckMessage,
>> Body:<ns2:AlarmA ......]
>> 22:42:28,546 | WARN | phase.PhaseInterceptorChain 361 |
>> Application
>> {http://tis.diva.eu/schemas/crisissvc/1.0}CrisisManagerService#{http://tis.diva.eu/schemas/crisissvc/1.0}TreatCrisis
>> has thrown exception, unwinding now org.apache.cxf.interceptor.Fault:
>> Exception occurred during execution on the exchange: Exchange[Message:
>> eu.diva.tis.api.ws.alert.alarmtypes.alarmackmess...@11ffde3]
>> at
>> org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:155)
>> at
>> org.apache.cxf.jaxws.AbstractJAXWSMethodInvoker.createFault(AbstractJAXWSMethodInvoker.java:85)
>> at
>> org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:121)
>> at
>> org.apache.cxf.jaxws.JAXWSMethodInvoker.invoke(JAXWSMethodInvoker.java:60)
>> .....
>> Caused by: org.apache.camel.CamelExecutionException: Exception occurred
>> during execution on the exchange: Exchange[Message:
>> eu.diva.tis.api.ws.alert.alarmtypes.alarmackmess...@11ffde3]
>> at
>> org.apache.camel.util.ObjectHelper.wrapCamelExecutionException(ObjectHelper.java:1055)
>> at
>> org.apache.camel.util.ExchangeHelper.extractResultBody(ExchangeHelper.java:445)
>> at
>> org.apache.camel.impl.DefaultProducerTemplate.extractResultBody(DefaultProducerTemplate.java:431)
>> at
>> org.apache.camel.impl.DefaultProducerTemplate.sendBodyAndHeader(DefaultProducerTemplate.java:156)
>> at
>> eu.diva.tis.crisis.internal.CrisisServiceImpl.sendAckToEsb(CrisisServiceImpl.java:322)
>> ............
>> Caused by: javax.xml.bind.JAXBException: Unable to create context
>> - with linked exception:
>> [java.lang.NoSuchMethodException:
>> com.sun.xml.bind.v2.ContextFactory.createContext(java.lang.String,
>> java.lang.ClassLoader)]
>> at javax.xml.bind.ContextFinder.find(ContextFinder.java:72)
>> at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:77)
>> at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:73)
>> at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:69)
>> at
>> org.apache.camel.converter.jaxb.JaxbDataFormat.createContext(JaxbDataFormat.java:138)
>> at
>> org.apache.camel.converter.jaxb.JaxbDataFormat.getContext(JaxbDataFormat.java:103)
>> at
>> org.apache.camel.converter.jaxb.JaxbDataFormat.marshal(JaxbDataFormat.java:58)
>> ... 68 more
>> Caused by: java.lang.NoSuchMethodException:
>> com.sun.xml.bind.v2.ContextFactory.createContext(java.lang.String,
>> java.lang.ClassLoader)
>> at java.lang.Class.getMethod(Class.java:1605)
>> at javax.xml.bind.ContextFinder.find(ContextFinder.java:69)
>> ... 74 more
>>
>>
>> I have tried to add com.sun.xml.bind.v2 to the imported packages. It is
>> resolved correctly :
>> ka...@root> packages:imports 210 | grep v2
>> Apache ServiceMix Bundles: jaxb-impl-2.1.12 (90): com.sun.xml.bind.v2;
>> version=0.0.0
>>
>> All processing is performed inside the same bundle (a SOAP service is
>> invoke, which calls a ProducerTemplate to send a message to the "direct"
>> route depicted above).
>>
>>
>> If you have the key, please, help me !
>> --
>> View this message in context:
>> http://old.nabble.com/Help-with-Camel-JAXB-%28SMX4-%2B-Camel-2.1.0%29-tp27695115p27695115.html
>> Sent from the Camel - Users (activemq) mailing list archive at
>> Nabble.com.
>>
>>
>
>
--
View this message in context:
http://old.nabble.com/Help-with-Camel-JAXB-%28SMX4-%2B-Camel-2.1.0%29-tp27695115p27699759.html
Sent from the Camel - Users (activemq) mailing list archive at Nabble.com.