Google AppEngine上的SOAP [英] SOAP on Google AppEngine

查看:56
本文介绍了Google AppEngine上的SOAP的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在GAE中开发Java SOAP客户端.它正在开发(本地主机)上工作,而不是在生产(应用程序)上工作. *在构建路径中未添加任何jar文件.

I'm trying to develop a Java SOAP client in GAE. It is working in development(localhost) not on production(appspot). * No jar files are added in build path.

例外:

com.sun.xml.bind.v2.runtime.reflect.Accessor$FieldReflection <init>: Unable to make javax.xml.ws.wsaddressing.W3CEndpointReference.address accessible.
java.lang.SecurityException: java.lang.IllegalAccessException: Reflection is not allowed on private javax.xml.ws.wsaddressing.W3CEndpointReference$Address javax.xml.ws.wsaddressing.W3CEndpointReference.address
    at com.google.appengine.runtime.Request.process-eae87f47efed913a(Request.java)
    at com.sun.xml.bind.v2.runtime.reflect.Accessor$FieldReflection.<init>(Accessor.java:243)
    at com.sun.xml.bind.AccessorFactoryImpl.createFieldAccessor(AccessorFactoryImpl.java:66)
    at com.sun.xml.bind.v2.model.impl.RuntimeClassInfoImpl.createFieldSeed(RuntimeClassInfoImpl.java:252)
    at com.sun.xml.bind.v2.model.impl.RuntimeClassInfoImpl.createFieldSeed(RuntimeClassInfoImpl.java:81)
    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:606)
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:253)
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:240)
    at javax.xml.bind.ContextFinder.find(ContextFinder.java:453)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:637)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:584)
    at com.sun.xml.ws.spi.ProviderImpl$2.run(ProviderImpl.java:220)
    at com.sun.xml.ws.spi.ProviderImpl$2.run(ProviderImpl.java:218)
    at java.security.AccessController.doPrivileged(AccessController.java:34)
    at com.sun.xml.ws.spi.ProviderImpl.getEPRJaxbContext(ProviderImpl.java:217)
    at com.sun.xml.ws.spi.ProviderImpl.<clinit>(ProviderImpl.java:88)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at java.lang.Class.newInstance(Class.java:370)
    at javax.xml.ws.spi.FactoryFinder.newInstance(FactoryFinder.java:49)
    at javax.xml.ws.spi.FactoryFinder.find(FactoryFinder.java:134)
    at javax.xml.ws.spi.Provider.provider(Provider.java:127)
    at javax.xml.ws.Service.<init>(Service.java:77)
    at jbilling.ApiServiceService.<init>(ApiServiceService.java:51)
    at com.soap.client.SOAPCXFClientServlet.doGet(SOAPCXFClientServlet.java:29)
    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 org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    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 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 org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
    at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:437)
    at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:444)
    at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:188)
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:308)
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:300)
    at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:441)
    at java.lang.Thread.run(Thread.java:724)
Caused by: java.lang.IllegalAccessException: Reflection is not allowed on private javax.xml.ws.wsaddressing.W3CEndpointReference$Address javax.xml.ws.wsaddressing.W3CEndpointReference.address
    ... 70 more

ApiServiceService.java:

ApiServiceService.java:

import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;

public class ApiServiceService extends Service {
    public ApiServiceService() {
     /*ApiServiceService.java:51*/   super(new URL("http://demowebsit.com/api?wsdl"), new QName("http://demowebsit.com/", "ApiServiceService"));
    }
}

大多数开发人员在部署到生产环境时都面临相同的问题:

Most of developers are facing the same issue when they deploy to production:

https://groups.google.com/forum /#!topic/adwords-api/ciSRh-74rAU https://code.google.com/p/googleappengine/issues/detail?id = 4910

但就我而言,除了JRE,我没有使用任何JARS.

but in my case I'm not using any JARS apart from JRE.

推荐答案

在挖洞一天之后,我认识到gae在jax-ws软件包中找到了一些白名单类.

After digging hole day i came to know gae found some whitelist class inside jax-ws package.

原因:

javax.xml.ws.Service内部调用javax.xml.ws.spi.Provider.provide()方法.这样,它将使用com.sun.xml.internal.ws.spi.ProviderImpl类从FactoryFinder中创建一个Provider变量.但是在gae中,ProviderImpl并未列入白名单,因此我们无法使用jax-ws创建webService客户端.

javax.xml.ws.Service calls internally javax.xml.ws.spi.Provider.provide() method. In that it will create a Provider variable from FactoryFinder using com.sun.xml.internal.ws.spi.ProviderImpl class. But in gae ProviderImpl is not white listed so we can't able to create webService client using jax-ws.

解决方案:

Apache Axis使用jaxrpc,并且与gae兼容.使用apache轴从wsdl生成WebService将解决此问题.

Apache Axis is using jaxrpc and it is compatible with gae. Generate WebService from wsdl using apache axis will solve this problem.

这篇关于Google AppEngine上的SOAP的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆