This discussion is archived
5 Replies Latest reply: Dec 8, 2012 7:51 AM by salzo RSS

Deployment of JSR-109 Web Services on Weblogic 11g (OAS migration)

salzo Newbie
Currently Being Moderated
Hi.

I'm being part of an ongoing migration effort from Oracle Application Server 10.1.3.5 to WebLogic 11g (10.3.6). Some of the OAS applications use old JSR-109 Web Services, where each service has the following components:

- A SEI interface that extends java.rmi.Remote and declares the service methods, which throw java.rmi.RemoteException (e.g. ServiceSEI)
- A service implementation POJO that implements the SEI interface (e.g. ServiceImpl)
- A [Service]-config.xml file that declares the service and relates name, namespaces, packages, interface and implementation (e.g. Service-config.xml)
- A declaration of the service implementation POJO as a servlet (with mapping) in web.xml (docs says it doesn't have to be technically a servlet)
- A webservices.xml file that defines the service and references the mapping file.
- A [Service]-mapping.xml file that defines the WS-Java mappings.

All the artifacts look right according the old documentation:
- Programming Web Services for WebLogic Server, Creating a J2EE Web Service Manually: http://otndnld.oracle.co.jp/document/products/wls/docs92/webserv/jsr109.html
- Web Services for J2EE 1.0 Final Release Spec: http://download.oracle.com/otndocs/jcp/websvcs-1.0-fr-spec-oth-JSpec/

The Web Services work OK in OAS. When I try to deploy any of the application that contain one of that services to WebLogic, I get the following Exception:
-----
<BEA-101216> <Servlet: "WSServlet_Procesos" failed to preload on startup in Web application: "/webapp".
java.lang.IllegalStateException: ClassNotFound co.com.acme.services.ServiceSEI_serviceOperation_RequestStruct
at weblogic.wsee.bind.runtime.internal.Deploytime109MappingHelper.processTypeMappings(Deploytime109MappingHelper.java:601)
at weblogic.wsee.bind.runtime.internal.Deploytime109MappingHelper.initBindingFileFrom109dd(Deploytime109MappingHelper.java:273)
at weblogic.wsee.bind.runtime.internal.Deploytime109MappingHelper.<init>(Deploytime109MappingHelper.java:171)
at weblogic.wsee.bind.runtime.internal.RuntimeBindingsBuilderImpl.createRuntimeBindings(RuntimeBindingsBuilderImpl.java:86)
at weblogic.wsee.ws.WsBuilder.createRuntimeBindingProvider(WsBuilder.java:705)
at weblogic.wsee.ws.WsBuilder.buildService(WsBuilder.java:201)
at weblogic.wsee.ws.WsFactory.createServerService(WsFactory.java:54)
at weblogic.wsee.deploy.ServletDeployInfo.createWsService(ServletDeployInfo.java:91)
at weblogic.wsee.deploy.DeployInfo.createWsPort(DeployInfo.java:372)
at weblogic.wsee.server.servlet.BaseWSServlet.init(BaseWSServlet.java:83)
at javax.servlet.GenericServlet.init(GenericServlet.java:241)
at weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.run(StubSecurityHelper.java:283)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
at weblogic.servlet.internal.StubSecurityHelper.createServlet(StubSecurityHelper.java:64)
at weblogic.servlet.internal.StubLifecycleHelper.createOneInstance(StubLifecycleHelper.java:58)
at weblogic.servlet.internal.StubLifecycleHelper.<init>(StubLifecycleHelper.java:48)
at weblogic.servlet.internal.ServletStubImpl.prepareServlet(ServletStubImpl.java:539)
at weblogic.servlet.internal.WebAppServletContext.preloadServlet(WebAppServletContext.java:1981)
at weblogic.servlet.internal.WebAppServletContext.loadServletsOnStartup(WebAppServletContext.java:1955)
at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:1874)
at weblogic.servlet.internal.WebAppServletContext.start(WebAppServletContext.java:3154)
at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1518)
at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:484)
at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:425)
at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:119)
at weblogic.application.internal.flow.ScopedModuleDriver.start(ScopedModuleDriver.java:200)
at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:247)
at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:425)
at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:119)
at weblogic.application.internal.flow.StartModulesFlow.activate(StartModulesFlow.java:27)
at weblogic.application.internal.BaseDeployment$2.next(BaseDeployment.java:671)
at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
at weblogic.application.internal.BaseDeployment.activate(BaseDeployment.java:212)
-----

I obviously though the EAR package given to me was incomplete, lacking the ClassNotFound related class, but the package was OK, and is exactly the same that deploys without problems in OAS.

The ClassNotFound related class is referenced in the <java-xml-type-mapping> element of the [Service]-mapping.xml file, e.g.:
-----
<java-xml-type-mapping>
<java-type>co.com.acme.services.ServiceSEI_serviceOperation_ResponseStruct</java-type>
<root-type-qname xmlns:typeNS="urn:Service/types">typeNS:serviceOperationResponse</root-type-qname>
<qname-scope>complexType</qname-scope>
<variable-mapping>
<java-variable-name>result</java-variable-name>
<xml-element-name>result</xml-element-name>
</variable-mapping>
</java-xml-type-mapping>
-----

I searched the OAs installation deployment dirs looking for the missing class and found it was present in a Jar called deployment-cache.jar. According OC4J related documentation, this Jar es auto-generated at deployment time.

Weblogic 11g documentation says that kind of Web Services will continue to run, without any changes, on version 10.3.x of WebLogic Server because the associated Web services run time is still supported in this release, although it is deprecated and will be removed from the product in future releases (http://docs.oracle.com/cd/E21764_01/web.1111/e13760/upgrade.htm). I know the right estrategy is migrate the Web Services, but right now my client needs to deploy and use them as they are. I think WL recognizes my service since internally is calling a "Deploytime109MappingHelper" class.

¿Is there any way I can deploy that kind of services to Weblogic 11g? ¿I'm I missing some required step?

As a workaround, I included the OAS generated deployment-cache.jar into the EAR to deploy in Weblogic 11g and the app deploys without errors, but I see this is not a nice solution.

Any help would be much appreciated.

Thanks,
Esteban

Edited by: salzo on Oct 30, 2012 9:54 AM

Edited by: salzo on Oct 30, 2012 9:56 AM
  • 1. Re: Deployment of JSR-109 Web Services on Weblogic 11g (OAS migration)
    Kalyan Pasupuleti-Oracle Expert
    Currently Being Moderated
    Hi,

    Try to use prefer-web-inf option with in weblogic.xml file as currently one of the jar is missing out from classpath.

    Regards,
    Kal
  • 2. Re: Deployment of JSR-109 Web Services on Weblogic 11g (OAS migration)
    salzo Newbie
    Currently Being Moderated
    Hi,

    The missing class is not in fact in the EAR, but that EAR is the same that deploys and works OK in OAS. OAS supposedly generates that specific kind of class at deployment time and packages it in Jar called deployment-cache.jar. Weblogic just says it can't find it.

    Thanks you very much.

    Esteban

    Edited by: salzo on Oct 31, 2012 7:40 AM
  • 3. Re: Deployment of JSR-109 Web Services on Weblogic 11g (OAS migration)
    Kalyan Pasupuleti-Oracle Expert
    Currently Being Moderated
    Hi,

    then try to include following jar with in domain_home / lib folder then try again.

    Regards,
    Kal
  • 4. Re: Deployment of JSR-109 Web Services on Weblogic 11g (OAS migration)
    user696 Explorer
    Currently Being Moderated
    Weblogic does not generate any files during deployment of web service.

    What are these files
    Service-config.xml
    Service-mapping.xml are these specific to OAS?

    You should consider regenerating the web service using the ant task.
    http://docs.oracle.com/cd/E12840_01/wls/docs103/webserv_ref/anttasks.html#wp1069899

    Regards,
    Sunil P
  • 5. Re: Deployment of JSR-109 Web Services on Weblogic 11g (OAS migration)
    salzo Newbie
    Currently Being Moderated
    Hi. The [Service]-mapping.xml file is a standard "JAX-RPC mapping file" according the JSR-109 spec and WebLogic 9.2 doc ([1],[2]). That's the file that references the class. Here's a fragment:

    -----
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <java-wsdl-mapping xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.1" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://www.ibm.com/webservices/xsd/j2ee_jaxrpc_mapping_1_1.xsd">
    <package-mapping>
    <package-type>co.com.acme.services</package-type>
    <namespaceURI>urn:Service/types</namespaceURI>
    </package-mapping>
    <package-mapping>
    <package-type>co.com.acme.services</package-type>
    <namespaceURI>urn:Services/wsdl</namespaceURI>
    </package-mapping>
    <java-xml-type-mapping>
    <java-type>co.com.acme.services.ServiceSEI_serviceOperation_RequestStruct</java-type>
    <root-type-qname xmlns:typeNS="urn:Service/types">typeNS:serviceOperation</root-type-qname>
    <qname-scope>complexType</qname-scope>
    <variable-mapping>
    <java-variable-name>String_1</java-variable-name>
    <xml-element-name>String_1</xml-element-name>
    </variable-mapping>
    </java-xml-type-mapping>
    ...
    -----

    I'll take a look at the ant task.

    Thank you very much.

    [1]http://download.oracle.com/otndocs/jcp/websvcs-1.0-fr-spec-oth-JSpec/
    [2]http://otndnld.oracle.co.jp/document/products/wls/docs92/webserv/jsr109.html

Legend

  • Correct Answers - 10 points
  • Helpful Answers - 5 points