FYI, I've introduced a 'namespaceMapperPropertyName' property which can be used with non JAXB-RI implementations. It meantime, setting that 'ignoreNamespaces' property on JSONProvider will do,

Cheers, Sergey

On 28/06/13 10:11, Sergey Beryozkin wrote:
On 28/06/13 01:57, jaybytez wrote:
So I am creating a CXF JAX-RS service that will be running on WLS 11.
The
version of CXF is 2.7.5.  Based on the documentation, I have also
included
geronimo-ws-metadata_2.0_spec-1.1.1.jar.

I finally was able to get the service working, but it only works on the
first invocation after I start the server.  Subsequent invocations cause
NoSuchMethodError on the javax.ws.rs.ServerErrorException.  I have seen a
few NoSuchMethodErrors in my logs that are coming out of the
javax.ws.rs-api
API.

There are 2 exceptions, see comments below

    <jaxrs:server id="jaxrs.TwitterProxyApi" address="/">
        <jaxrs:serviceBeans>
            <ref bean="twitterProxyApiEndpoint" />
        </jaxrs:serviceBeans>
        <jaxrs:providers>
            <ref bean="jaxbProvider" />
            <ref bean="jsonProvider" />
        </jaxrs:providers>
        <jaxrs:extensionMappings>
             <entry key="xml" value="application/xml" />
             <entry key="json" value="application/json" />
         </jaxrs:extensionMappings>
        <jaxrs:inInterceptors>
            <bean
                class="com.foo.interceptor.LoggingMDCInInterceptor" />
        </jaxrs:inInterceptors>
        <jaxrs:outInterceptors>
            <bean
                class="com.foo.interceptor.LoggingMDCOutInterceptor" />
        </jaxrs:outInterceptors>
        <jaxrs:features>
            <cxf:logging />
        </jaxrs:features>
    </jaxrs:server>

    <bean id="jsonProvider"
class="org.apache.cxf.jaxrs.provider.json.JSONProvider"/>
    <bean id="jaxbProvider"
class="org.apache.cxf.jaxrs.provider.JAXBElementProvider" />

If I put this configuration in, I get one type of NoSuchMethodError:

Jun 27, 2013 5:45:26 PM
org.apache.cxf.jaxrs.provider.AbstractJAXBProvider
handleExceptionStart
WARNING: javax.xml.bind.PropertyException: name:
com.sun.xml.internal.bind.namespacePrefixMapper value:
org.apache.cxf.common.jaxb.NamespaceMapper@4a1b64
    at
org.eclipse.persistence.jaxb.JAXBMarshaller.setProperty(JAXBMarshaller.java:590)


Looks like this is one is actually causing the issue. We probably need
to customize a namespace mapper property name to have it supported
across different JAXB implementations. I think in your case you can set
"ignoreNamespaces" property on JSONProvider and it should fix the issue

    at
org.apache.cxf.jaxrs.provider.AbstractJAXBProvider.setMarshallerProp(AbstractJAXBProvider.java:150)

    at
org.apache.cxf.jaxrs.provider.AbstractJAXBProvider.setNamespaceMapper(AbstractJAXBProvider.java:142)

    at
org.apache.cxf.jaxrs.provider.json.JSONProvider.marshal(JSONProvider.java:540)

    at
org.apache.cxf.jaxrs.provider.json.JSONProvider.writeTo(JSONProvider.java:369)

    at
org.apache.cxf.jaxrs.utils.JAXRSUtils.writeMessageBody(JAXRSUtils.java:1326)

    at
org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.serializeMessage(JAXRSOutInterceptor.java:282)

    at
org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.processResponse(JAXRSOutInterceptor.java:154)

    at
org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.handleMessage(JAXRSOutInterceptor.java:85)

    at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271)

    at
org.apache.cxf.interceptor.OutgoingChainInterceptor.handleMessage(OutgoingChainInterceptor.java:77)

    at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271)

    at
org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)

    at
org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:239)

    at
org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223)

    at
org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:203)

    at
org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:137)

    at
org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:158)

    at
org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:243)

    at
org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:168)

    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    at
org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:219)

    at
weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:242)

    at
weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:216)

    at
weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:132)

    at
weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:338)

    at
weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:221)

    at
weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3284)

    at
weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3254)

    at
weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)

    at
weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
    at
weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57)
    at
weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2163)

    at
weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2089)

    at
weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2074)

    at
weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1513)

    at
weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:254)

    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)

<Jun 27, 2013 5:45:26 PM PDT> <Error> <HTTP> <BEA-101017>
<[ServletContext@10756764[app:twitter-proxy-api-18
module:twitter-proxy-api-war.war path:null spec-version:null]] Root
cause of
ServletException.
java.lang.NoSuchMethodError:
javax.ws.rs.ServerErrorException.validate(Ljavax/ws/rs/core/Response;Ljavax/ws/rs/core/Response$Status$Family;)Ljavax/ws/rs/core/Response;

    at
javax.ws.rs.ServerErrorException.<init>(ServerErrorException.java:101)
    at
javax.ws.rs.InternalServerErrorException.<init>(InternalServerErrorException.java:80)

    at
org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.handleWriteException(JAXRSOutInterceptor.java:385)

    at
org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.serializeMessage(JAXRSOutInterceptor.java:305)

    at
org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.processResponse(JAXRSOutInterceptor.java:154)

    Truncated. see log file for complete stacktrace

If I put an invalid screen name on the invocation to Twitter, the
response
gets converted and creates this NoSuchMethodError:

<Jun 27, 2013 5:52:47 PM PDT> <Error> <HTTP> <BEA-101017>
<[ServletContext@10756764[app:twitter-proxy-api-18
module:twitter-proxy-api-war.war path:null spec-version:null]] Root
cause of
ServletException.
java.lang.NoSuchMethodError: javax.ws.rs.core.Response.hasEntity()Z
    at
org.apache.cxf.jaxrs.utils.JAXRSUtils.convertFaultToResponse(JAXRSUtils.java:1570)

    at
org.apache.cxf.jaxrs.JAXRSInvoker.handleFault(JAXRSInvoker.java:313)
    at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:207)
    at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:100)
    at
org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58)

    Truncated. see log file for complete stacktrace


I think you have jsr311 API somewhere - I've seen one of my colleagues
reporting a similar issue where both jsr311 & m10 2.0 API were on the
class path

Sergey

This is the method where I make the invocation (I have a Collection
Wrapper
that is annotated with Xml annotations and it holds a POJO that is also
annotated).

public Statuses getStatuses(String screenName) {
    List<Status> statuses = new ArrayList<Status>();

    .............

    try {
        //Invoke Twitter
    } catch (TwitterException e) {
        throw new WebApplicationException(e,
Response.Status.SERVICE_UNAVAILABLE);
    }
    return new Statuses(statuses);
}

Thanks for the help.



--
View this message in context:
http://cxf.547215.n5.nabble.com/JAX-RS-NoSuchMethodError-with-2-7-5-on-WebLogic-Server-tp5730032.html

Sent from the cxf-user mailing list archive at Nabble.com.





--
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com

Reply via email to