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.
<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)
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
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.