|
From: Mikhail K. <mkh...@gr...> - 2011-06-08 14:46:04
|
Hello,
I'm trying to run simple Spring web app with DispatcherServlet
web.xml
<servlet>
<servlet-name>resteasy</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>resteasy</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
----------------------------------------------------
resteasy-servlet.xml
<!-- Import basic SpringMVC Resteasy integration -->
<import resource="classpath:springmvc-resteasy.xml"/>
<!-- the only @Path entity -->
<bean class="com.xx.xx.xx.Devices"></bean>
----------------------------------------------------
I have
Caused by: java.lang.NullPointerException: null
at org.jboss.resteasy.links.impl.RESTUtils.getServiceMethods(RESTUtils.java:85)
~[resteasy-links-2.2.0.GA.jar:na]
at org.jboss.resteasy.links.impl.RESTUtils.addDiscovery(RESTUtils.java:52)
~[resteasy-links-2.2.0.GA.jar:na]
at org.jboss.resteasy.links.impl.LinkDecorator$1.beforeMarshal(LinkDecorator.java:27)
~[resteasy-links-2.2.0.GA.jar:na]
at com.sun.xml.bind.v2.runtime.XMLSerializer.fireBeforeMarshalEvents(XMLSerializer.java:752)
~[jaxb-impl-2.1.12.jar:2.1.12]
at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsSoleContent(XMLSerializer.java:586)
~[jaxb-impl-2.1.12.jar:2.1.12]
at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeRoot(ClassBeanInfoImpl.java:320)
~[jaxb-impl-2.1.12.jar:2.1.12]
at com.sun.xml.bind.v2.runtime.property.ArrayReferenceNodeProperty.serializeListBody(ArrayReferenceNodeProperty.java:114)
~[jaxb-impl-2.1.12.jar:2.1.12]
at com.sun.xml.bind.v2.runtime.property.ArrayERProperty.serializeBody(ArrayERProperty.java:152)
~[jaxb-impl-2.1.12.jar:2.1.12]
at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:332)
~[jaxb-impl-2.1.12.jar:2.1.12]
at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:699)
~[jaxb-impl-2.1.12.jar:2.1.12]
at com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl$1.serializeBody(ElementBeanInfoImpl.java:152)
~[jaxb-impl-2.1.12.jar:2.1.12]
at com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl$1.serializeBody(ElementBeanInfoImpl.java:189)
~[jaxb-impl-2.1.12.jar:2.1.12]
at com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeBody(ElementBeanInfoImpl.java:315)
~[jaxb-impl-2.1.12.jar:2.1.12]
at com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeRoot(ElementBeanInfoImpl.java:322)
~[jaxb-impl-2.1.12.jar:2.1.12]
at com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeRoot(ElementBeanInfoImpl.java:72)
~[jaxb-impl-2.1.12.jar:2.1.12]
at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:494)
~[jaxb-impl-2.1.12.jar:2.1.12]
at com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:315)
~[jaxb-impl-2.1.12.jar:2.1.12]
at com.sun.xml.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:244)
~[jaxb-impl-2.1.12.jar:2.1.12]
at javax.xml.bind.helpers.AbstractMarshallerImpl.marshal(AbstractMarshallerImpl.java:75)
~[na:1.6.0_24]
at org.jboss.resteasy.plugins.providers.jaxb.CollectionProvider.writeTo(CollectionProvider.java:220)
~[resteasy-jaxb-provider-2.2.0.GA.jar:na]
at org.jboss.resteasy.core.interception.MessageBodyWriterContextImpl.proceed(MessageBodyWriterContextImpl.java:117)
~[resteasy-jaxrs-2.2.0.GA.jar:na]
at org.jboss.resteasy.plugins.interceptors.encoding.GZIPEncodingInterceptor.write(GZIPEncodingInterceptor.java:48)
~[resteasy-jaxrs-2.2.0.GA.jar:na]
at org.jboss.resteasy.core.interception.MessageBodyWriterContextImpl.proceed(MessageBodyWriterContextImpl.java:123)
~[resteasy-jaxrs-2.2.0.GA.jar:na]
at org.jboss.resteasy.core.ServerResponse.writeTo(ServerResponse.java:250)
~[resteasy-jaxrs-2.2.0.GA.jar:na]
AFAIget the core issue is the absence of Registry in a context map:
LinkDecorator.java
....
public void beforeMarshal(Object entity) {
UriInfo uriInfo = ResteasyProviderFactory.getContextData(UriInfo.class);
ResourceMethodRegistry registry = (ResourceMethodRegistry)
ResteasyProviderFactory.getContextData(Registry.class);
!!!!!! registry==null here
// find all rest service classes and scan them
RESTUtils.addDiscovery(entity, uriInfo, registry);
Unfortunately I can't find the place where Registry should be inserted
into the context map.
But it's definitely not in org.jboss.resteasy.core.SynchronousDispatcher:441
public void pushContextObjects(HttpRequest request, HttpResponse response)
{
Map contextDataMap = ResteasyProviderFactory.getContextDataMap();
contextDataMap.put(HttpRequest.class, request);
contextDataMap.put(HttpResponse.class, response);
contextDataMap.put(HttpHeaders.class, request.getHttpHeaders());
contextDataMap.put(UriInfo.class, request.getUri());
contextDataMap.put(Request.class, new RequestImpl(request));
contextDataMap.putAll(defaultContextObjects);
}
Does anybody use DispatcherServlet?
Regards
--
Sincerely yours
Mikhail (Mike) Khludnev
Developer
|