2013-10-07 93 views
1

我嘗試使用GAE中的Spring MVC創建應用程序。我需要響應一個XML並使用JAXB來做到這一點。響應對象是複雜的(contais接口),但在我的本地工作正常。問題是當我部署到App Engine。我的請求的答覆拋出此異常(當複雜的對象,簡單對象做工精細):GAE + JAXB ...好吧在本地,而不是在部署到GAE時

Uncaught exception from servlet 
java.lang.InternalError 
    at com.sun.xml.bind.v2.model.annotation.RuntimeInlineAnnotationReader.getClassValue(RuntimeInlineAnnotationReader.java:139) 
    at com.sun.xml.bind.v2.model.annotation.RuntimeInlineAnnotationReader.getClassValue(RuntimeInlineAnnotationReader.java:53) 
    at com.sun.xml.bind.v2.model.impl.PropertyInfoImpl.isApplicable(PropertyInfoImpl.java:212) 
    at com.sun.xml.bind.v2.model.impl.PropertyInfoImpl.getApplicableAdapter(PropertyInfoImpl.java:242) 
    at com.sun.xml.bind.v2.model.impl.PropertyInfoImpl.<init>(PropertyInfoImpl.java:122) 
    at com.sun.xml.bind.v2.model.impl.ERPropertyInfoImpl.<init>(ERPropertyInfoImpl.java:53) 
    at com.sun.xml.bind.v2.model.impl.ElementPropertyInfoImpl.<init>(ElementPropertyInfoImpl.java:96) 
    at com.sun.xml.bind.v2.model.impl.RuntimeElementPropertyInfoImpl.<init>(RuntimeElementPropertyInfoImpl.java:59) 
    at com.sun.xml.bind.v2.model.impl.RuntimeClassInfoImpl.createElementProperty(RuntimeClassInfoImpl.java:165) 
    at com.sun.xml.bind.v2.model.impl.ClassInfoImpl.addProperty(ClassInfoImpl.java:875) 
    at com.sun.xml.bind.v2.model.impl.ClassInfoImpl.findFieldProperties(ClassInfoImpl.java:405) 
    at com.sun.xml.bind.v2.model.impl.ClassInfoImpl.getProperties(ClassInfoImpl.java:308) 
    at com.sun.xml.bind.v2.model.impl.RuntimeClassInfoImpl.getProperties(RuntimeClassInfoImpl.java:176) 
    at com.sun.xml.bind.v2.model.impl.ModelBuilder.getClassInfo(ModelBuilder.java:243) 
    at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:100) 
    at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:81) 
    at com.sun.xml.bind.v2.model.impl.ModelBuilder.getClassInfo(ModelBuilder.java:209) 
    at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:95) 
    at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:81) 
    at com.sun.xml.bind.v2.model.impl.ModelBuilder.getTypeInfo(ModelBuilder.java:315) 
    at com.sun.xml.bind.v2.model.impl.ModelBuilder.getTypeInfo(ModelBuilder.java:330) 
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:466) 
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:302) 
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1140) 
    at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:154) 
    at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:121) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:616) 
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:233) 
    at javax.xml.bind.ContextFinder.find(ContextFinder.java:410) 
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:594) 
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:542) 
    at org.springframework.http.converter.xml.AbstractJaxb2HttpMessageConverter.getJaxbContext(AbstractJaxb2HttpMessageConverter.java:88) 
    at org.springframework.http.converter.xml.AbstractJaxb2HttpMessageConverter.createMarshaller(AbstractJaxb2HttpMessageConverter.java:49) 
    at org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter.writeToResult(Jaxb2RootElementHttpMessageConverter.java:94) 
    at org.springframework.http.converter.xml.AbstractXmlHttpMessageConverter.writeInternal(AbstractXmlHttpMessageConverter.java:66) 
    at org.springframework.http.converter.AbstractHttpMessageConverter.write(AbstractHttpMessageConverter.java:181) 
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter$ServletHandlerMethodInvoker.writeWithMessageConverters(AnnotationMethodHandlerAdapter.java:975) 
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter$ServletHandlerMethodInvoker.handleResponseBody(AnnotationMethodHandlerAdapter.java:933) 
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter$ServletHandlerMethodInvoker.getModelAndView(AnnotationMethodHandlerAdapter.java:882) 
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:428) 
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) 
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) 
    at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:125) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:35) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at com.google.apphosting.utils.servlet.JdbcMySqlConnectionCleanupFilter.doFilter(JdbcMySqlConnectionCleanupFilter.java:57) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) 
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) 
    at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:266) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
    at org.mortbay.jetty.Server.handle(Server.java:326) 
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923) 
    at com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76) 
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 
    at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:146) 
    at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:439) 
    at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:483) 
    at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:490) 
    at com.google.tracing.TraceContext.runInContext(TraceContext.java:777) 
    at com.google.tracing.TraceContext$DoInTraceContext.runInContext(TraceContext.java:754) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:345) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:337) 
    at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:487) 
    at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251) 
    at java.lang.Thread.run(Thread.java:679) 

編輯:我添加了響應的結構......我嘗試做戰略格局。

MyRequestController.java

@Controller 
@RequestMapping("/.myrequestX") 
public class MyRequestController 
{ 

    @Autowired 
    private GenericResponse response; 

    @Autowired 
    private X_ResponseBehaviorImpl valorDTO; 

    @RequestMapping(method = RequestMethod.GET) 
    @ResponseBody 
    public Object getRespuesta(ModelMap model, HttpServletRequest req) 
    { 
     // Other parts of code... 


     response.getResponseBehavior().setResponse(valorDTO); 
     return response; 
    } 

} 

GenericResponse.java

@XmlRootElement 
@XmlAccessorType(XmlAccessType.FIELD) 
@XmlSeeAlso({ X_ResponseBehaviorImpl.class, Y_ResponseBehaviorImpl.class}) 
public class GenericResponse 
{ 

    @XmlElement 
    private String id; 

    @XmlElement 
    private ResponseBehavior responseBehavior; 

    public String getId() { 
    return id; 
    } 

    public void setId(String id) { 
    this.id = id; 
    } 

    public ResponseBehavior getResponseBehavior() { 
    return responseBehavior; 
    } 

    public void setResponseBehavior (ResponseBehavior responseBehavior) { 
    this.responseBehavior = responseBehavior; 
    } 
} 

ResponseBehavior.java

import com.sun.xml.internal.bind.AnyTypeAdapter; 

@XmlRootElement 
@XmlJavaTypeAdapter(AnyTypeAdapter.class) 
public interface ResponseBehavior 
{ 
    void setResponse(Object value); 
} 

X_ResponseBehaviorImpl.java

public class X_ResponseBehaviorImpl implements ResponseBehavior 
{ 

@XmlElement 
String comb10; 

@XmlElement 
String reint4; 

private void setResponse(Object value) 
{ 
    X_ValueDTO x_value = (X_ValueDTO) value; 

    this.comb10 = x_value.getCombinacion(); 
    this.reint4 = x_value.getReintegro(); 
} 


    public void setComb10(String comb10) { 
    this.comb10 = comb10; 
} 


    public void setReint4(String reint4) { 
    this.reint4 = reint4; 
} 


} 

Java6包含JAXB ..我嘗試使用某些版本(JDK6_u04,JDK6_u14 ...),但沒有解決問題...

在此先感謝!

+0

最後,我沒有發現我的問題與JAXB和GAE的任何反應......但我做了這個庫的功能:[谷歌-GSON](https://code.google.com/p/google- gson /) – Sinffredy

回答

1

Java 6可能包含JAXB,但我不確定它在GAE的JVM環境中可用。我建議您將JAXB jar包與您的應用程序一起打包。我有一個類似的問題,在GAE生產環境中沒有Rhino jar(用於腳本支持)。

希望有所幫助。

+0

我在構建路徑中添加了JAXB jar(2.1.2)和我的其他庫...並且我遇到了同樣的問題:( – Sinffredy

+0

可以粘貼失敗的類的代碼嗎?錯誤即將到來來自RuntimeInlineAnnotationReader ..我的猜測是你的類有一個可能在GAE/J環境中不可用的註釋或者類似的錯誤 –

+0

我編輯我的問題......我認爲問題出現在註釋中接口ResponseBehavior。在此先感謝!!! – Sinffredy

相關問題