Uploaded image for project: 'Axis2'
  1. Axis2
  2. AXIS2-3230

axis2 deployment failure for web services proxied by Spring

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Critical
    • Resolution: Fixed
    • 1.3
    • None
    • deployment
    • None
    • tomcat 5.5.25
      jre 1.5.0.12
      windows xp

    Description

      I have a simple webservice proxied by a Spring proxy factory bean.
      The spring context is configured as so:

      <bean id="simpleWebService" class="org.springframework.aop.framework.ProxyFactoryBean">
      <property name="proxyInterfaces"><value>com.test.simpleWebService</value></property>
      <property name="target"><ref local="simpleWebServiceTarget"/></property>
      <property name="interceptorNames">
      <list>
      <value>methodAuditInterceptor</value>
      </list>
      </property>
      </bean>

      <bean id="simpleWebServiceTarget" class="com.test.simpleWebServiceImpl">

      The services.xml is:

      <service name="SimpleWebService">
      <parameter name="ServiceObjectSupplier">
      org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier
      </parameter>
      <parameter name="SpringBeanName">simpleWebService</parameter>

      <messageReceivers>
      <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
      class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
      <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
      class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
      </messageReceivers>
      </service>

      At runtime, Spring generates a JDK proxy around the simple web service. When the axis2 service deployer tries to deploy this webservice it generates the following stacktrace:

      org.apache.axis2.deployment.DeploymentException: The following error occurred during schema generation: Unable to load bytecode for class $Proxy4
      at org.apache.axis2.deployment.repository.util.ArchiveReader.processServiceGroup(ArchiveReader.java:144)
      at org.apache.axis2.deployment.ServiceDeployer.deploy(ServiceDeployer.java:78)
      at org.apache.axis2.deployment.repository.util.DeploymentFileData.deploy(DeploymentFileData.java:137)
      at org.apache.axis2.deployment.DeploymentEngine.doDeploy(DeploymentEngine.java:571)
      at org.apache.axis2.deployment.repository.util.WSInfoList.update(WSInfoList.java:141)
      at org.apache.axis2.deployment.RepositoryListener.update(RepositoryListener.java:318)
      at org.apache.axis2.deployment.RepositoryListener.checkServices(RepositoryListener.java:220)
      at org.apache.axis2.deployment.DeploymentEngine.loadServices(DeploymentEngine.java:118)
      at org.apache.axis2.deployment.WarBasedAxisConfigurator.loadServices(WarBasedAxisConfigurator.java:272)
      at org.apache.axis2.context.ConfigurationContextFactory.createConfigurationContext(ConfigurationContextFactory.java:78)
      at org.apache.axis2.transport.http.AxisServlet.initConfigContext(AxisServlet.java:500)
      at org.apache.axis2.transport.http.AxisServlet.init(AxisServlet.java:420)
      at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1139)
      at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:966)
      at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3956)
      at org.apache.catalina.core.StandardContext.start(StandardContext.java:4230)
      at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
      at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
      at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
      at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
      at org.apache.catalina.core.StandardService.start(StandardService.java:448)
      at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
      at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
      at java.lang.reflect.Method.invoke(Unknown Source)
      at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
      at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
      Caused by: org.apache.axis2.deployment.DeploymentException: The following error occurred during schema generation: Unable to load bytecode for class $Proxy4
      at org.apache.axis2.deployment.ServiceBuilder.populateService(ServiceBuilder.java:389)
      at org.apache.axis2.deployment.repository.util.ArchiveReader.buildServiceGroup(ArchiveReader.java:95)
      at org.apache.axis2.deployment.repository.util.ArchiveReader.processServiceGroup(ArchiveReader.java:137)
      ... 28 more
      Caused by: org.apache.axis2.deployment.DeploymentException: The following error occurred during schema generation: Unable to load bytecode for class $Proxy4
      at org.apache.axis2.deployment.ServiceBuilder.populateService(ServiceBuilder.java:354)
      ... 30 more
      Caused by: java.io.IOException: Unable to load bytecode for class $Proxy4
      at org.apache.axis2.description.java2wsdl.bytecode.ClassReader.getBytes(ClassReader.java:84)
      at org.apache.axis2.description.java2wsdl.bytecode.ParamReader.<init>(ParamReader.java:57)
      at org.apache.axis2.description.java2wsdl.bytecode.ChainedParamReader.<init>(ChainedParamReader.java:52)
      at org.apache.axis2.description.java2wsdl.bytecode.MethodTable.<init>(MethodTable.java:30)
      at org.apache.axis2.description.java2wsdl.DefaultSchemaGenerator.<init>(DefaultSchemaGenerator.java:116)
      at org.apache.axis2.deployment.util.Utils.fillAxisService(Utils.java:340)
      at org.apache.axis2.deployment.ServiceBuilder.populateService(ServiceBuilder.java:347)
      ... 30 more

      From the stacktrace it appears that java2wsdl requires the bytecode but because the proxy is generated in memory it doesn't exist.
      I have though about a couple of workarounds including:
      1) Using AspectJ to weave at compile time (starting to make the application more complex and I am not sure if this will work)
      2) Provide a pregenerated WSDL (I can create the WSDL myself) so that I can bypass this step during deployment? Is this possible?

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              ed.p ed p
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: