Does GAE supports applications that consumes a SOAP web service?

401 views
Skip to first unread message

Jason Bourne

unread,
Jan 31, 2016, 7:15:09 PM1/31/16
to Google App Engine
I am running a simple Java web application that consumes a SOAP based web service (WSDL: http://www.webservicex.net/geoipservice.asmx?WSDL).
and when i run my application in GAE, it throws this error:

HTTP ERROR 500

Problem accessing /testapp. Reason:

    MASM0001: Default configuration file [ jaxws-tubes-default.xml ] was not found

Caused by:

java.lang.IllegalStateException: MASM0001: Default configuration file [ jaxws-tubes-default.xml ] was not found
	at com.sun.xml.internal.ws.assembler.MetroConfigLoader.init(MetroConfigLoader.java:127)
	at com.sun.xml.internal.ws.assembler.MetroConfigLoader.<init>(MetroConfigLoader.java:104)
	at com.sun.xml.internal.ws.assembler.TubelineAssemblyController.getTubeCreators(TubelineAssemblyController.java:78)
	at com.sun.xml.internal.ws.assembler.MetroTubelineAssembler.createClient(MetroTubelineAssembler.java:103)
	at com.sun.xml.internal.ws.client.Stub.createPipeline(Stub.java:328)
	at com.sun.xml.internal.ws.client.Stub.<init>(Stub.java:295)
	at com.sun.xml.internal.ws.client.Stub.<init>(Stub.java:228)
	at com.sun.xml.internal.ws.client.Stub.<init>(Stub.java:243)
	at com.sun.xml.internal.ws.client.sei.SEIStub.<init>(SEIStub.java:84)
	at com.sun.xml.internal.ws.client.WSServiceDelegate.getStubHandler(WSServiceDelegate.java:814)
	at com.sun.xml.internal.ws.client.WSServiceDelegate.createEndpointIFBaseProxy(WSServiceDelegate.java:803)
	at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:436)
	at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:404)
	at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:386)
	at javax.xml.ws.Service.getPort(Service.java:119)
	at net.webservicex.GeoIPService.getGeoIPServiceSoap(GeoIPService.java:72)
	at com.test.TestAppServlet.doGet(TestAppServlet.java:18)
	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.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
	at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:128)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
	at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
	at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63)
	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 com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
	at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:366)
	at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:349)
	at com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116)
	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.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:98)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
	at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:512)
	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.HttpParser.parseNext(HttpParser.java:547)
	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
	at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
	at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)

Here is a copy of my Java Web App: https://drive.google.com/folderview?id=0B2_2R8EyDVyJOHhzNXNCd2JhWDg&usp=sharing

Nick (Cloud Platform Support)

unread,
Feb 1, 2016, 7:22:33 PM2/1/16
to Google App Engine
Hey Jason,

It's interesting to note that you've seen this error. If you'd like to claim this as an issue of the platform, please make a post to the App Engine Public Issue Tracker with more detailed information as to why this is an issue with the platform and how to reproduce and observe it. If you'd just like technical help with the error, you should post to stackoverflow using relevant tags. This forum is more for general discussion of the platform and services, and one-on-one, specific-issue technical support which this post appears to be attempting to elicit is out of scope.

Best of luck!

Emanuele Ziglioli

unread,
Feb 2, 2016, 3:47:56 PM2/2/16
to Google App Engine
I use SOAP but a different jaxb connector, the salesforce one.
That gives me more control over timeouts. Unfortunately their code generation tool is semibroken:

Why are you trying to access the WSDL file directly?
Typically you would get the wsdl and generate code using xjb.

Jason Bourne

unread,
Feb 5, 2016, 4:38:54 AM2/5/16
to Google App Engine
What do you mean I access the WSDL file directly?

If you will look at my sample program, i used wsimport command to extract the classes from the WSDL. then i put all the extracted classes inside a package 
in my project.

Emanuele Ziglioli

unread,
Feb 8, 2016, 5:03:22 PM2/8/16
to Google App Engine
Hi Jason,

sorry I misunderstood what you were trying to do. I thought you were trying to access the WSDL file using App Engine.
I didn't know about wsimport, perhaps it's just a way to call into "xjc" (I incorrectly wrote xjb).
I don't know if I'll have the time to look at your project but if you want to try the salesforce connector, let me know and I'll gather some information.
As I wrote, it does provide you with more control as it calls into GAE's HTTPRequest so you can control things such as timeouts.
It may even solve your problem.

Jason Bourne

unread,
Feb 10, 2016, 6:05:14 AM2/10/16
to Google App Engine
It's alright, I'm quite confuse with how I can use JAXB. Let me ask you a question, if you were to consume a soap web service, and you already have
the WSDL. what do you do next? because you mentioned that you don't use WSIMPORT. maybe there is another approach that I can do based on
how you do it.

Emanuele Ziglioli

unread,
Feb 10, 2016, 5:00:48 PM2/10/16
to Google App Engine
I'm really sorry!! I got confused myself, it's been a few years!!

Indeed you use wsimport to process the WSDL file if you want to use jaxws to access a SOAP web point.
"xjc" is a way to generate code that transforms the received XML response in Java classes and to populate objects.


wsdluri='https://www...?wsdl'
gensrcdir
='.'
targetpackage
='com.yourpackage'
resourcedir
='.'
wsimport
-s "$gensrcdir" -extension -p $targetpackage -keep "$wsdluri"


For the salesforce connector (the one we use) it's a bit more complicated, using their tool

java -cp force-wsc-30.0.0.jar:ST4-4.0.7.jar:antlr-runtime-3.5.jar  com.sforce.ws.tools.wsdlc theWSDL.xml yourjar.jar target


Once you've generated that code, you use jaxws. But I can see you've posted another message so I'll read that first.
Parsing the returned XML is an additional step.

Reply all
Reply to author
Forward
0 new messages