Unable to invoke web Services through java service

Hi,
I have written a flow service and a java service to communicate to a webservices server over SSL. I’m able to connect to the web services server through a java client application. But when execute as a java service in wM I get the following exception. Any help regarding this issue would be much appreciated.

SSL startup exception
java.home = D:\wm65\IntegrationServer\jvm
javax.net.ssl.trustStore = D:\wm65\IntegrationServer\jvm\lib\security\cacerts
javax.net.ssl.trustStorePassword = changeit
SSL startup exception
java.home = D:\wm65\IntegrationServer\jvm
javax.net.ssl.trustStore = D:\wm65\IntegrationServer\jvm\lib\security\cacerts
javax.net.ssl.trustStorePassword = changeit
electric.registry.RegistryException: could not bind to path:
https://…wsdl
at electric.net.soap.SOAPRegistry.bind(Unknown Source)
at electric.registry.compound.CompoundRegistry.bind(Unknown Source)
at electric.registry.Registry.bind(Unknown Source)
at electric.registry.Registry.bind(Unknown Source)
.
.
.
.
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:85)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:58)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java(Compiled Code))
at java.lang.reflect.Method.invoke(Method.java(Compiled Code))
at com.wm.app.b2b.server.JavaService.baseInvoke(JavaService.java:322)
at com.wm.app.b2b.server.invoke.InvokeManager.process(InvokeManager.java:612)
at com.wm.app.b2b.server.invoke.StatisticsProcessor.process(StatisticsProcessor.java:44)
at com.wm.app.b2b.server.invoke.ServiceCompletionImpl.process(ServiceCompletionImpl.java:226)
at com.wm.app.b2b.server.invoke.ValidateProcessor.process(ValidateProcessor.java:49)
at com.wm.app.b2b.server.ACLManager.process(ACLManager.java:194)
at com.wm.app.b2b.server.invoke.DispatchProcessor.process(DispatchProcessor.java:39)
at com.wm.app.b2b.server.AuditLogManager.process(AuditLogManager.java:407)
at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:521)
at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:369)
at com.wm.app.b2b.server.ServiceManager.invoke(ServiceManager.java:246)
at com.wm.app.b2b.server.ServiceManager.invoke(ServiceManager.java:128)
at com.wm.app.b2b.server.HTTPInvokeHandler._process(HTTPInvokeHandler.java:131)
at com.wm.app.b2b.server.InvokeHandler.process(InvokeHandler.java:115)
at com.wm.app.b2b.server.Dispatch.run(Dispatch.java:298)
at com.wm.util.pool.PooledThread.run(PooledThread.java:105)
at java.lang.Thread.run(Thread.java:568)
Caused by: java.io.IOException: no factory for protocol ssl: java.lang.ClassCastException: com.ibm.jsse.bm: unable to load file https://…wsdl
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:80)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java(Compiled Code))
at java.lang.reflect.Constructor.newInstance(Constructor.java(Compiled Code))
at electric.util.reflect.Reflect.cloneException(Unknown Source)
at electric.net.http.loader.HTTPResourceLoader.loadResource(Unknown Source)
at electric.util.loader.ResourceLoaders.loadResource(Unknown Source)
at electric.wsdl.WSDL.(Unknown Source)
at electric.wsdl.loader.WSDLLoader.getWSDL(Unknown Source)
… 29 more

Regards
Kaviraj

Why are you trying to consume a web service using Java? For development testing generate a Flow using a web services connector from the WSDL.

Remeber the Eamon Productivity Theorem (EPT)

Mark

Hi Mark,
Thanks for your suggestion. We had already tried using web Service connector and faced some issues with it.

We are invoking a webservice which has exposed around 16 features of a legacy system. Among the 16 services, 4 services are returning basic Java data type values such as String and boolean and are working fine. Rest of the 12 services are returning electric.util.mime.MIMEData and when we try to access these services we did not get any result.

We tried to debug the flow services generated from the wsdl file and its throwing com.wm.app.b2b.client.ns.NSRuntimeException at pub.client:soapRPC.

Can you please help us regarding this issue?

Regards
K.C.Kaviraj

I don’t think the IS soapRPC service knows how to unmarshal or deserialize the electric.util.mime.MIMEData object.

It is possible to embed Glue into IS such that you can write Java services that invoke methods on Glue classes. Support can give you details on an update to the WmTomcat package that makes embedding Glue into IS a bit more straightforward.

If you can’t change the design of the web services you are consuming to avoid returning custom java objects, you will probably have to use an “embedded” Glue server to consume the services instead of the IS pub.client:soapRPC built-in service.

You are running into a very common interoperability challenge of SoapRPC. You are calling a service that is returning “objects” that your soap processor does not understand. Returning custom objects in a web service dramatically reduces their usefulness and interoperability as the consumer must understand something about the underlying implementation of the service in order to properly represent it internally.

Java based libraries such as JAXB (and Glue) provide mechanisms, often called mapping files, to tell the library or soap processor how to unmarshall a custom java object. IS does not have a way for you to do this.

This is one reason why the WS-I Basic Profile specifically excludes the soap-rpc/encoded “style” of web services.

HTH,

Mark