Dennis,
I really appreciate that you direct me to this direction. Would it be the
right rule to add to spring.xml?
Thanks,
<beanid="transformFeature"class="org.apache.cxf.feature.StaxTransformFeature">
<propertyname="inTransformElements">
<entrykey="{ns2}id"value="{ns2}id=id"/>
<entrykey="{ns2}status"value="{ns2}status=status"/>
<entrykey="{ns2}systemId"value="{ns2}systemId=systemId"/> </map>
</property></bean> <map>
If I want to transform from
<platformServiceResult>
<ns2:status>SUCCESS</ns2:status>
<ns2:systemId>ebilprodapp103</ns2:systemId>
to
<id>9faa0d0e-1932-4064-95ec-6a0e10da4c60</id>
<status>SUCCESS</status>
<systemId>ebilprodapp103</systemId>
</platformServiceResult>
________________________________
From: Dennis Sosnoski <[email protected]>
To: [email protected]
Sent: Friday, May 11, 2012 8:25 AM
Subject: Re: [javax.xml.bind.UnmarshalException: unexpected element
You should be able to use the Transformation feature to modify the response
before it's passed to JAXB:
http://cxf.apache.org/docs/transformationfeature.html
- Dennis
On 05/11/2012 11:17 AM, Steve Kim wrote:
> That's also my findings. However, this response is from 3rd party. 3rd
> party won't be able to update within a short period of time. Only options at
> this point is that we have to do something about it. Someone recommended to
> manually update package-info.java to include as below:
> However, this will cause not to put the name space on the request, 3rd party
> can not use the request. I'm using cxf2.4.6 with jaxb-impl.2.1.7. Is there
> any workaround so that I can resolve this?
> @
> elementFormDefault=XmlNsForm.javax.xml.bind.annotation.XmlSchema(namespace =
> "http://xxx.com/binders/general/2010/1/1", QUALIFIED)
>
> ________________________________
> From: Dennis Sosnoski<[email protected]>
> To: [email protected]
> Sent: Saturday, May 12, 2012 8:02 AM
> Subject: Re: [javax.xml.bind.UnmarshalException: unexpected element
>
> Hi Steve,
>
> The schema and message are somewhat garbled, but judging from the error
> message the problem is that the response has a namespace for the id element
> (and presumably others) while your code expects this not to have a namespace.
> It looks like the schema matches your code, since it does not specify
> elementFormDefault='qualified' and without this child elements do not use
> namespaces.
>
> - Dennis
>
> Dennis M. Sosnoski
> Java SOA and Web Services Consulting<http://www.sosnoski.com/consult.html>
> CXF and Web Services Security Training<http://www.sosnoski.com/training.html>
> Web Services Jump-Start<http://www.sosnoski.com/jumpstart.html>
>
>
> On 05/11/2012 10:45 AM, Steve Kim wrote:
>> I'm getting the exception while it's parsing the response from 3rd party as
>> below: Can someone please help as this is very critical failure on our
>> service?
>> Thanks for your time
>> org.apache.cxf.phase.PhaseInterceptorChain - Interceptor for
>>{http://xxx.com/binders/general/2010/1/1}BinderServiceService#{http://xxxx.com/binders/general/2010/1/1}processRequest
>> has thrown exception, unwinding now
>> org.apache.cxf.interceptor.Fault: Unmarshalling Error: unexpected element
>> (uri:"http://xxx.com/common/general/2010/1/1/platformServiceResult",
>> local:"id"). Expected elements
>> are<{}id>,<{}information>,<{}systemMessageNumber>,<{}status>,<{}newToken>,<{}systemMessage>,<{}systemId>,<{}parameters>
>> at org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(
>> at org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(
>> at org.apache.cxf.jaxb.io.DataReaderImpl.read(
>> at org.apache.cxf.interceptor.DocLiteralInInterceptor.handleMessage(
>> at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(
>> at org.apache.cxf.endpoint.ClientImpl.onMessage(
>> at
>> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(
>> at
>> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(
>> at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(
>> at org.apache.cxf.io.CacheAndWriteOutputStream.postClose(
>> at org.apache.cxf.io.CachedOutputStream.close(
>> at org.apache.cxf.transport.AbstractConduit.close(
>> at org.apache.cxf.transport.http.HTTPConduit.close(
>> at
>> org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(
>> at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(
>> at org.apache.cxf.endpoint.ClientImpl.doInvoke(
>> at org.apache.cxf.endpoint.ClientImpl.invoke(
>> at org.apache.cxf.endpoint.ClientImpl.invoke(
>> at org.apache.cxf.endpoint.ClientImpl.invoke(
>> at org.apache.cxf.frontend.ClientProxy.invokeSync(
>> at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(
>> at $Proxy69.processRequest(Unknown Source)
>> at sun.reflect.NativeMethodAccessorImpl.invoke0(
>> at sun.reflect.NativeMethodAccessorImpl.invoke(
>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(
>> at java.lang.reflect.Method.invoke(
>> ......
>> at org.springframework.test.context.junit4.SpringMethodRoadie.runTestMethod(
>> at
>> org.springframework.test.context.junit4.SpringMethodRoadie$RunBeforesThenTestThenAfters.run(
>> at
>> org.springframework.test.context.junit4.SpringMethodRoadie.runWithRepetitions(
>> at org.springframework.test.context.junit4.SpringMethodRoadie.runTest(
>> at org.springframework.test.context.junit4.SpringMethodRoadie.run(
>> at
>> org.springframework.test.context.junit4.SpringJUnit4ClassRunner.invokeTestMethod(
>> at org.junit.internal.runners.JUnit4ClassRunner.runMethods(
>> at org.junit.internal.runners.JUnit4ClassRunner$1.run(
>> at org.junit.internal.runners.ClassRoadie.runUnprotected(
>> at org.junit.internal.runners.ClassRoadie.runProtected(
>> at
>> org.junit.internal.runners.JUnit4ClassRunner.run(JAXBEncoderDecoder.java:801)JAXBEncoderDecoder.java:642)DataReaderImpl.java:156)DocLiteralInInterceptor.java:109)PhaseInterceptorChain.java:263)ClientImpl.java:795)HTTPConduit.java:1626)HTTPConduit.java:1493)HTTPConduit.java:1401)CacheAndWriteOutputStream.java:47)CachedOutputStream.java:194)AbstractConduit.java:56)HTTPConduit.java:648)MessageSenderInterceptor.java:62)PhaseInterceptorChain.java:263)ClientImpl.java:531)ClientImpl.java:461)ClientImpl.java:364)ClientImpl.java:317)ClientProxy.java:88)JaxWsClientProxy.java:134)Native
>>
>> Method)NativeMethodAccessorImpl.java:39)DelegatingMethodAccessorImpl.java:25)Method.java:597)at
>>
>>org.springframework.test.context.junit4.SpringTestMethod.invoke(SpringTestMethod.java:160)SpringMethodRoadie.java:233)SpringMethodRoadie.java:333)SpringMethodRoadie.java:217)SpringMethodRoadie.java:197)SpringMethodRoadie.java:143)SpringJUnit4ClassRunner.java:160)JUnit4ClassRunner.java:51)JUnit4ClassRunner.java:44)ClassRoadie.java:27)ClassRoadie.java:37)JUnit4ClassRunner.java:42)Caused
>> by: javax.xml.bind.UnmarshalException- with linked exception:
>> [
>> at
>> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.handleStreamException(
>> at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(
>> at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(
>> at org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(
>> ... 52 more
>> Caused by:
>> at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(
>> at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(
>> at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(
>> at
>> com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(
>> at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.childElement(
>> at com.sun.xml.bind.v2.runtime.unmarshaller.StructureLoader.childElement(
>> at
>> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(
>> at
>> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(
>> at
>> com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.handleStartElement(
>> at com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(
>> at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(
>> ... 54 more
>> Caused by:
>> ... 65 morejavax.xml.bind.UnmarshalException: unexpected element
>> (uri:"http://xxxx.com/common/general/2010/1/1/platformServiceResult",
>> local:"id"). Expected elements
>> are<{}id>,<{}information>,<{}systemMessageNumber>,<{}status>,<{}newToken>,<{}systemMessage>,<{}systemId>,<{}parameters>]UnmarshallerImpl.java:421)UnmarshallerImpl.java:360)UnmarshallerImpl.java:337)JAXBEncoderDecoder.java:778)javax.xml.bind.UnmarshalException:
>> unexpected element
>> (uri:"http://schemas.benefitfocus.com/common/general/2010/1/1/platformServiceResult",
>> local:"id"). Expected elements are
>>
>><{}id>,<{}information>,<{}systemMessageNumber>,<{}status>,<{}newToken>,<{}systemMessage>,<{}systemId>,<{}parameters>UnmarshallingContext.java:609)Loader.java:244)Loader.java:239)Loader.java:116)Loader.java:101)StructureLoader.java:245)UnmarshallingContext.java:452)UnmarshallingContext.java:433)StAXStreamConnector.java:275)StAXStreamConnector.java:209)UnmarshallerImpl.java:358)javax.xml.bind.UnmarshalException:
>> unexpected element
>>(uri:"http://schemas.benefitfocus.com/common/general/2010/1/1/platformServiceResult",
>> local:"id"). Expected elements
>>are<{}id>,<{}information>,<{}systemMessageNumber>,<{}status>,<{}newToken>,<{}systemMessage>,<{}systemId>,<{}parameters>
>> Below is schema def:
>> -----------------------------
>> <?xml version='1.0'
>>
>>encoding='UTF-8'?><xs:schemaxmlns:tns=http://xxx.com/binders/general/2010/1/1xmlns:xs="http://www.w3.org/2001/XMLSchema"version="1.0"targetNamespace=http://xxx.com/binders/general/2010/1/1><xs:elementname="processRequestResponse"type="tns:processRequestResponse"/></xs:complexT<xs:complexTypename="processRequestResponse"><xs:sequence><xs:elementname="return"type="tns:binderReturn"minOccurs="0"/></xs:sequence></xs:complexType><xs:complexTypename="binderReturn"><xs:sequence>
>
><xs:elementname="binderResponse"type="tns:binderResponse"minOccurs="0"/><xs:elementname="platformServiceResult"type="tns:platformServiceResult"minOccurs="0"/></xs:sequence></xs:complexType><xs:complexTypename="binderResponse"><xs:sequence><xs:elementname="errorCode"type="xs:string"minOccurs="0"/><xs:elementname="errorMessage"type="xs:string"minOccurs="0"/><xs:elementname="requestId"type="xs:string"minOccurs="0"/><xs:elementname="source"type="xs:string"minOccurs="0"/><xs:elementname="
>> status"type="xs:string"minOccurs="0"/><xs:elementname="transactionId"type="xs:string"minOccurs="0"/></xs:sequence></xs:complexType><xs:complexTypename="platformServiceResult"><xs:sequence><xs:elementname="id"type="xs:string"minOccurs="0"/><xs:elementname="information"type="xs:string"nillable="true"minOccurs="0"maxOccurs="unbounded"/><xs:elementname="parameters"type="xs:string"nillable="true"minOccurs="0"maxOccurs="unbounded"/><xs:elementname="status"type="tns:platformServiceStatus"minOccurs="0"/><xs:elementname="systemId"type="xs:string"minOccurs="0"/><xs:elementname="systemMessage"type="xs:string"minOccurs="0"/><xs:elementname="systemMessageNumber"type="xs:int"minOccurs="0"/><xs:elementname="newToken"type="xs:string"minOccurs="0"/></xs:sequence><xs:simpleTypename="platformServiceStatus"><xs:restrictionbase="xs:string"><xs:enumerationvalue="SUCCESS"/></xs:restriction></xs:simpleType></
>> ------------------------------------------------
>> ------------------------ Below is WSDL
>>-------------------------<definitionsxmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"xmlns:tns="http://services.benefitfocus.com/binders/general/2010/1/1"xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns="http://schemas.xmlsoap.org/wsdl/"name="BinderService"targetNamespace=http://xxx.com/binders/general/2010/1/1><types><xsd:schema><xsd:importnamespace=http://xxx.com/binders/general/2010/1/1schemaLocation="see
>>
>>above"/></xsd:schema></types><messagename="processRequestResponse"><partname="parameters"element="tns:processRequestResponse"/></message><soap:operationsoapAction=""/><input><soap:bodyuse="literal"/></input><output><soap:bodyuse="literal"/></output></operation><operationname="processRequest"><soap:operationsoapAction=""/><input><soap:bodyuse="literal"/></input><output><soap:bodyuse="literal"/></output></operation></binding><servicename="BinderService"><portname="BinderServicePort"binding="tns:BinderServicePortBinding"><soap:addresslocation=https://xxx.com/eProxy/service/Servicexmlns=""/><apwsdl:targetWSDLxmlns:ap=http://yyy.com/amfxmlns:apwsdl="urn:zzz.wsdl"xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"><apwsdl:URL>xxxxxx</apwsdl:URL><apwsdl:agentIDxxxxxx</apwsdl:agentID><apwsdl:uwsID>xxxxxx</apwsdl:uwsID><apwsdl:uwsLocalname>xxxxxx</apwsdl:uwsLocalname></apwsdl:targetWSDL></port></
>> ---------------- end of wsdl ----------------
>> --------------- soap response from Oracle Jax-ws server -------<?xml
>>version='1.0'
>>encoding='UTF-8'?><S:Envelopexmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><ns3:processRequestResponsexmlns:ns2=http://xxxx.com/common/general/2010/1/1/platformServiceResultxmlns:ns3=http://xxxx.com/binders/general/2010/1/1><return><responseDate>2012-05-08-04:00</responseDate><binderResponse><requestId>904356447_201208</requestId><source>eHealth</source><status>succeeded</status></binderResponse><platformServiceResult><ns2:id>9faa0d0e-1932-4064-95ec-6a0e10da4c60</ns2:id><ns2:status>SUCCESS</ns2:status><ns2:systemId>ebilprodapp103</ns2:systemId></platformServiceResult></return></ns3:processRequestResponse></</S:Body>S:Envelope>
>> </service>definitions>xs:schema></xs:complexType>
<platformServiceResult>
</platformServiceResult><ns2:id>9faa0d0e-1932-4064-95ec-6a0e10da4c60</ns2:id>