You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by Ramiro Pugh <ra...@gmail.com> on 2014/02/12 20:19:39 UTC
Create a null (empty) response
Hi! I'm having a trouble with a null response with CXF. I'm using CXF with
Camel and DataFormat POJO. When I try to return a null response (so you can
check the null response inside the wrapper) CXF crash at
at
org.apache.cxf.databinding.AbstractWrapperHelper.createWrapperObject(AbstractWrapperHelper.java:107)
at
org.apache.cxf.jaxws.interceptors.WrapperClassOutInterceptor.handleMessage(WrapperClassOutInterceptor.java:100)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:262)[147:org.apache.cxf.cxf-api:2.6.0.redhat-60024]
at
org.apache.cxf.interceptor.OutgoingChainInterceptor.handleMessage(OutgoingChainInterceptor.java:77)[147:org.apache.cxf.cxf-api:2.6.0.redhat-60024]
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:262)[147:org.apache.cxf.cxf-api:2.6.0.redhat-60024]
at
org.apache.cxf.phase.PhaseInterceptorChain.resume(PhaseInterceptorChain.java:231)[147:org.apache.cxf.cxf-api:2.6.0.redhat-60024]
at
org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:78)
at
org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:236)
at
org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:214)
at
org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:194)
at
org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:130)
at
org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:221)
at
org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:141)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:713)
at
org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:197)
at sun.reflect.GeneratedMethodAccessor160.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)[:1.6.0_30]
at java.lang.reflect.Method.invoke(Method.java:597)[:1.6.0_30]
In the debug I see in the
class org.apache.cxf.databinding.AbstractWrapperHelper
public Object createWrapperObject(List<?> lst)
throws Fault {
try {
Object wrapperObject = createWrapperObject(wrapperType);
for (int x = 0; x < setMethods.length; x++) {
if (getMethods[x] == null
&& setMethods[x] == null
&& fields[x] == null) {
//this part is a header or something
//that is not part of the wrapper.
continue;
}
* Object o = lst.get(x);*
o = getPartObject(x, o);
if (o instanceof List && getMethods[x] != null) {
List<Object> col =
CastUtils.cast((List<?>)getMethods[x].invoke(wrapperObject));
if (col == null) {
//broken generated java wrappers
if (setMethods[x] != null) {
setMethods[x].invoke(wrapperObject, o);
} else {
fields[x].set(wrapperObject, lst.get(x));
}
} else {
List<Object> olst = CastUtils.cast((List<?>)o);
col.addAll(olst);
}
} else if (setMethods[x] != null) {
setMethods[x].invoke(wrapperObject, o);
} else if (fields[x] != null) {
fields[x].set(wrapperObject, lst.get(x));
}
}
return wrapperObject;
} catch (Exception ex) {
ex.printStackTrace();
throw new Fault(ex.getCause());
}
}
The line *Object o = lst.get(x)* gets a NPE, because the wrapper doesn't
have any element inside. So for test only I put a ArrayList with null
element inside. With this solution CXF is able to response a null element
inside the wrapper.
So, this is OK?
Because my solution for now is create an intercetpro and if the message out
is empty so I will create that list and put it inside de wrapper.
--
Ramiro Pugh