Both messages SHOULD work. I THINK with 2.2.10 and newer, it would work as we do a better job of passing the exact XMLStreamReader into JAXB where it can configure it's requirements such as the interning. (plus, a much newer version of JAXB)
Dan On Friday 19 November 2010 3:19:47 pm Kessel, Christopher wrote: > I know it's not in CXF, but for what it's worth in case someone stumbles > across this thread via Google. The problem was namespace related. > > The problematic query looked like this (note the "xmlns" bits): > > <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> > <soap:Body> > <findContacts xmlns="http://ourdns.com"> > <RequestTransaction> > <queryInfo xmlns=""> > ...stuff > </queryInfo> > </RequestTransaction> > </findContacts> > </soap:Body> > </soap:Envelope> > > CXF (or JAXB underneath) threw the error unless the "xmlns" bits designated > a namespace, such as "xmlns:ns1". A successful request looked like: > > <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> > <soap:Body> > <ns1:findContacts xmlns:ns1="http://ourdns.com"> > <ns2:RequestTransaction xmlns:ns2="http://ourdns.com"> > <queryInfo> > ...stuff > </queryInfo> > </ns2:RequestTransaction> > </ns1:findContacts> > </soap:Body> > </soap:Envelope> > > I don't know much about name spaces, so I don't really know if that means > JAXB is being overly picky or if the customer end wasn't honoring the > specs around name spaces. > > FYI, > Chris > > -----Original Message----- > From: Sergey Beryozkin [mailto:[email protected]] > Sent: Friday, November 19, 2010 2:03 AM > To: [email protected] > Subject: Re: "Namespace URIs and local names to the unmarshaller needs to > be interned" > > I've seen this exception before and I've been able to reproduce it this > morning in rt/frontend/jaxrs/.../JAXBElementProviderTest. > > Look at AbstractJaxbProvider.InTransformReader#getProperty. It overrides it > with the only purpose : return false for "org.codehaus.stax2.internNames" > and "org.codehaus.stax2.internNsUris". If you disable this code then you'll > see a couple of JAXBElementProviderTest tests failing. > > As far as I remember, JAXB queries for the values of these properties and > when say Woodstox is used without custom readers/writers being introduced, > it probably returns 'true' and then does some sort of interning. So in my > case I can only make sure the custom reader returns false. I think that not > all custom XMLStreamReaders should have to deal with these properties - it > probably depends on how do they go in customizing the reading process. > > Hope it helps a bit > Sergey > > > On Thu, Nov 18, 2010 at 11:10 PM, Kessel, Christopher < > > [email protected]> wrote: > > I appreciate the pointers. I'm baffled too. We use the SOAP interface > > heavily (our servers use it to talk internally) so I know it works, or > > can work anyway. I can even get it to work just fine with a direct > > command line "curl". > > > > The fellow on the other end is much like me, but using C#. The wsdl > > creates code and it's all black box stuff on the actual underlying > > communication :) > > > > Thanks, > > Chris > > > > -----Original Message----- > > From: Daniel Kulp [mailto:[email protected]] > > Sent: Thursday, November 18, 2010 1:29 PM > > To: [email protected] > > Cc: Kessel, Christopher > > Subject: Re: "Namespace URIs and local names to the unmarshaller needs to > > be interned" > > > > On Thursday 18 November 2010 4:18:11 pm Kessel, Christopher wrote: > > > We're in production with it and headed in a 2-month change moratorium > > > for the holiday season, so I can't swap anything out for probably 3 > > > months unless failure to do so will activate a tactical nuke > > > somewhere. Even then, there'd be a risk analysis study. > > > > > > Any suggestions on what to look for in their input that'd be causing > > > it? It's a customer writing their integration with our SOAP server, so > > > even though I can't change anything right now, they might be able to > > > change something on their end. > > > > Honestly, I have NO idea. IMO, this is something that would pretty much > > always occur (aka: for all customers) or for none of them. I really > > don't know what would trigger this for just SOME messages and not > > others. :-( > > > > The only thing I can think of would be to capture the raw soap messages > > and try and compare them with messages that do work. I don't THINK an > > extra child element that isn't in the schema would cause this, but it > > might. > > > > You could TRY turning on schema validation as well. That may change > > things or > > maybe give an error message if that is what the problem is. > > > > Dan > > > > > Thanks, > > > Chris > > > > > > -----Original Message----- > > > From: Daniel Kulp [mailto:[email protected]] > > > Sent: Thursday, November 18, 2010 12:54 PM > > > To: [email protected] > > > Cc: Kessel, Christopher > > > Subject: Re: "Namespace URIs and local names to the unmarshaller needs > > > to be interned" > > > > > > On Thursday 18 November 2010 2:31:05 pm Kessel, Christopher wrote: > > > > Any idea what this error means? A customer is trying to access our > > > > SOAP interface, we're using CXF (2.2.6 I think), and I can see the > > > > exception in the log. I can't duplicate it. > > > > > > I saw some similar issues like this when doing some work on the > > > > FastInfoset > > > > > stuff. My recommendations: > > > > > > 1) Try with CXF 2.2.10 or 2.3.0. We've done a bit of work to make > > > sure the original XMLStreamReaders are passed into JAXB and JAXB > > > usually can then reconfigure them a bit better to make sure things are > > > interned correctly and such. > > > > > > 2) Make sure Woodstox is picked up and not the parser built into the > > > JDK. > > > > > > Dan > > > > > > > I suspect it has nothing to do with CXF itself, but I really have no > > > > idea > > > > > > what it means. > > > > > > > > Thanks, > > > > Chris > > > > > > > > DefaultValidationEventHandler: [ERROR]: Namespace URIs and local > > > > names > > > > to > > > > > > the unmarshaller needs to be interned. > > > > org.apache.cxf.interceptor.Fault: > > > > Unmarshalling Error: Namespace URIs and local names to the > > > > unmarshaller needs to be interned. at > > > > org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java > > > > > > : 764) at > > > > org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java > > > > > > : 623) at > > > > > > > > org.apache.cxf.jaxb.io.DataReaderImpl.read(DataReaderImpl.java:128) > > > > at > > > > org.apache.cxf.interceptor.DocLiteralInInterceptor.getPara(DocLiteralInIn > > > > > > t erceptor.java:248) at > > > > org.apache.cxf.interceptor.DocLiteralInInterceptor.handleMessage(DocLiter > > > > > > a lInInterceptor.java:124) at > > > > org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorCh > > > > > > a in.java:243) at > > > > org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiatio > > > > > > n Observer.java:109) at > > > > org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestina > > > > > > t ion.java:98) at > > > > org.apache.cxf.transport.servlet.ServletController.invokeDestination(Serv > > > > > > l etController.java:406) at > > > > org.apache.cxf.transport.servlet.ServletController.invoke(ServletControll > > > > > > e r.java:178) at > > > > org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFSer > > > > > > v let.java:142) at > > > > org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(Abstra > > > > > > c tHTTPServlet.java:179) at > > > > org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPS > > > > > > e rvlet.java:103) at > > > > javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at > > > > org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTP > > > > > > S ervlet.java:159) at > > > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applicat > > > > > > i onFilterChain.java:290) at > > > > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilte > > > > > > r Chain.java:206) at > > > > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve > > > > > > . java:233) at > > > > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve > > > > > > . java:191) at > > > > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java: > > > > 1 28) at > > > > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java: > > > > 1 02) at > > > > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.j > > > > > > a va:109) at > > > > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:29 > > > > > > 3 ) at > > > > org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849 > > > > > > ) at > > > > org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(H > > > > > > t tp11Protocol.java:583) at > > > > org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:45 > > > > 4) at java.lang.Thread.run(Thread.java:619) > > > > Caused by: javax.xml.bind.UnmarshalException > > > > > > > > - with linked exception: > > > > [javax.xml.bind.UnmarshalException: Namespace URIs and local names to > > > > the > > > > > > unmarshaller needs to be interned.] at > > > > com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.handleStreamExc > > > > > > e ption(UnmarshallerImpl.java:425) at > > > > com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(Unma > > > > > > r shallerImpl.java:362) at > > > > com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(Unmar > > > > > > s hallerImpl.java:339) at > > > > org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java > > > > > > : 749) ... 26 more > > > > > > > > Caused by: javax.xml.bind.UnmarshalException: Namespace URIs and > > > > local names to the unmarshaller needs to be interned. at > > > > com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent > > > > > > ( UnmarshallingContext.java:642) at > > > > com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:2 > > > > > > 5 4) at > > > > com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:2 > > > > > > 4 9) at > > > > com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElem > > > > > > e nt(Loader.java:114) at > > > > com.sun.xml.bind.v2.runtime.unmarshaller.Loader.childElement(Loader.java: > > > > 1 01) at > > > > com.sun.xml.bind.v2.runtime.unmarshaller.StructureLoader.childElement(Str > > > > > > u ctureLoader.java:245) at > > > > com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext._startEleme > > > > > > n t(UnmarshallingContext.java:478) at > > > > com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElemen > > > > > > t (UnmarshallingContext.java:459) at > > > > com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.handleStartE > > > > > > l ement(StAXStreamConnector.java:242) at > > > > com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(StAXS > > > > > > t reamConnector.java:176) at > > > > com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(Unma > > > > > > r shallerImpl.java:360) ... 28 more > > > > Caused by: javax.xml.bind.UnmarshalException: Namespace URIs and > > > > local names to the unmarshaller needs to be interned. ... 39 more > > > > -- > > Daniel Kulp > > [email protected] > > http://dankulp.com/blog -- Daniel Kulp [email protected] http://dankulp.com/blog
