用户定义的数据类型不能在Jboss 5.0.1的Web服务中返回

时间:2012-07-16 03:42:10

标签: java java-ee web

我正在使用Jboss 5.0.1,jdk 1.6.0 update 31并将EJB实现为Web服务,我的Web服务模块中的方法在我的示例BenefitLevel数组对象中返回一个JavaBean对象Array。在JBoss中执行时会引发以下异常:

    08:57:08,552 ERROR [ServiceProxy] Service error
    javax.xml.rpc.ServiceException: Cannot create proxy
          at org.jboss.ws.core.jaxrpc.client.ServiceImpl.getPort(ServiceImpl.java:359)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
           at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
           at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
           at java.lang.reflect.Method.invoke(Method.java:597)
           at org.jboss.ws.core.jaxrpc.client.ServiceProxy.invoke(ServiceProxy.java:127)
           at $Proxy105.getCarrierWSSEIPort(Unknown Source)
           at org.apache.jsp.index_jsp._jspService(index_jsp.java:92)
           at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
           at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
            at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369)
           at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:322)
           at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:249)
           at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
           at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
           at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
           at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
           at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
              at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
           at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
           at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
           at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
           at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
           at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
          at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
          at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
          at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
            at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
           at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
          at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:601)
          at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
          at java.lang.Thread.run(Thread.java:662)
        Caused by: java.lang.IllegalStateException: Cannot synchronize to any of these methods:
      public abstract stubs.BenefitLevel[] stubs.CarrierWSSEI.getActiveBenData() throws java.rmi.RemoteException

    OperationMetaData:
      qname={urn:CarrierWS/wsdl}getActiveBenData
     javaName=getActiveBenData
     style=rpc/literal
     oneWay=false
     soapAction=
     ReturnMetaData:
      xmlName=result
     partName=result
      xmlType={urn:CarrierWS/types/arrays/com/test/cas/carrier/plan/info}BenefitLevelArray
      javaType=com.benefitpartnersinc.cas.carrier.plan.info.BenefitLevel[]
       mode=OUT
      inHeader=false
        index=-1
            at org.jboss.ws.metadata.umdm.OperationMetaData.eagerInitialize(OperationMetaData.java:491)
             at org.jboss.ws.metadata.umdm.EndpointMetaData.eagerInitializeOperations(EndpointMetaData.java:557)
            at org.jboss.ws.metadata.umdm.EndpointMetaData.initializeInternal(EndpointMetaData.java:541)
            at org.jboss.ws.metadata.umdm.EndpointMetaData.setServiceEndpointInterfaceName(EndpointMetaData.java:220)
             at org.jboss.ws.core.jaxrpc.client.ServiceImpl.getPort(ServiceImpl.java:345)
            ... 33 more
            08:57:08,567 ERROR [STDERR] javax.xml.rpc.ServiceException: Cannot create proxy
           08:57:08,567 ERROR [STDERR]     at org.jboss.ws.core.jaxrpc.client.ServiceImpl.getPort(ServiceImpl.java:359)
          08:57:08,567 ERROR [STDERR]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          08:57:08,567 ERROR [STDERR]     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
         08:57:08,567 ERROR [STDERR]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
         08:57:08,567 ERROR [STDERR]     at java.lang.reflect.Method.invoke(Method.java:597)
         08:57:08,567 ERROR [STDERR]     at org.jboss.ws.core.jaxrpc.client.ServiceProxy.invoke(ServiceProxy.java:127)
          08:57:08,567 ERROR [STDERR]     at $Proxy105.getCarrierWSSEIPort(Unknown Source)
            08:57:08,567 ERROR [STDERR]     at org.apache.jsp.index_jsp._jspService(index_jsp.java:92)
           08:57:08,567 ERROR [STDERR]     at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        08:57:08,567 ERROR [STDERR]     at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
       08:57:08,567 ERROR [STDERR]     at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369)
      08:57:08,567 ERROR [STDERR]     at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:322)
       08:57:08,567 ERROR [STDERR]     at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:249)
        08:57:08,567 ERROR [STDERR]     at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
      08:57:08,567 ERROR [STDERR]     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
      08:57:08,567 ERROR [STDERR]     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        08:57:08,567 ERROR [STDERR]     at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
        08:57:08,567 ERROR [STDERR]     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
       08:57:08,567 ERROR [STDERR]     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
      08:57:08,567 ERROR [STDERR]     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
      08:57:08,567 ERROR [STDERR]     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
      08:57:08,567 ERROR [STDERR]     at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
      08:57:08,567 ERROR [STDERR]     at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
      08:57:08,567 ERROR [STDERR]     at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
   08:57:08,567 ERROR [STDERR]     at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
     08:57:08,567 ERROR [STDERR]     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    08:57:08,567 ERROR [STDERR]     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
     08:57:08,567 ERROR [STDERR]     at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
     08:57:08,567 ERROR [STDERR]     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    08:57:08,567 ERROR [STDERR]     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
     08:57:08,567 ERROR [STDERR]     at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
    08:57:08,567 ERROR [STDERR]     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:601)
    08:57:08,567 ERROR [STDERR]     at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
     08:57:08,567 ERROR [STDERR]     at java.lang.Thread.run(Thread.java:662)
    08:57:08,567 ERROR [STDERR] Caused by: java.lang.IllegalStateException: Cannot synchronize to any of these methods:
    public abstract stubs.BenefitLevel[] stubs.CarrierWSSEI.getActiveBenData() throws java.rmi.RemoteException

        OperationMetaData:
           qname={urn:CarrierWS/wsdl}getActiveBenData
          javaName=getActiveBenData
          style=rpc/literal
           oneWay=false
          soapAction=
        ReturnMetaData:
       xmlName=result
       partName=result
          xmlType={urn:CarrierWS/types/arrays/com/test/cas/carrier/plan/info}BenefitLevelArray
       javaType=com.test.cas.carrier.plan.info.BenefitLevel[]
       mode=OUT
      inHeader=false
       index=-1
         08:57:08,567 ERROR [STDERR]     at org.jboss.ws.metadata.umdm.OperationMetaData.eagerInitialize(OperationMetaData.java:491)
         08:57:08,567 ERROR [STDERR]     at org.jboss.ws.metadata.umdm.EndpointMetaData.eagerInitializeOperations(EndpointMetaData.java:557)
        08:57:08,567 ERROR [STDERR]     at org.jboss.ws.metadata.umdm.EndpointMetaData.initializeInternal(EndpointMetaData.java:541)
          08:57:08,567 ERROR [STDERR]     at org.jboss.ws.metadata.umdm.EndpointMetaData.setServiceEndpointInterfaceName(EndpointMetaData.java:220)
          08:57:08,567 ERROR [STDERR]     at org.jboss.ws.core.jaxrpc.client.ServiceImpl.getPort(ServiceImpl.java:345)
          08:57:08,567 ERROR [STDERR]     ... 33 more

我的Web客户端代码如下:

     <%@page import="java.util.Hashtable"%>
      <%@page import="javax.naming.*,com.q4.*,javax.xml.rpc.Stub,stubs.CarrierWS,stubs.CarrierWSSEI,stubs.CarrierWSSEI_Impl"%>
     <%@page contentType="text/html" pageEncoding="UTF-8"%>
      <!DOCTYPE html>
   <html>
     <head>
         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
          <title>JSP Page</title>
        </head>
       <body>
          <h1>Hello World!</h1>
          <%


         try
                           {
                        InitialContext ic = new InitialContext( );
                        CarrierWS carrierws = (CarrierWS)ic.lookup("java:comp/env/service/CarrierWS");
                out.println("========================" + carrierws);
                 CarrierWSSEI sei = carrierws.getCarrierWSSEIPort();
                  out.println("Invoking the service please wait ............." + carrierws.getCarrierWSSEIPort());
                ((Stub)sei)._setProperty(Stub.ENDPOINT_ADDRESS_PROPERTY,"http://localhost:8080/TestWS3WAR/CarrierWS");
                out.println("Invoking the service please wait ............." + sei.getActiveBenData().length);

             }
               catch(Exception e)
                                  {
                 out.println("Exception occurred : " + e.getMessage());
                  e.printStackTrace();
             }

             %>
        </body>
   </html>

请在我出错的地方帮助我。

1 个答案:

答案 0 :(得分:0)

至少在Jboss 5.0.1 GA中,用户定义的数据类型不能在Web服务中返回。

用户定义的数据类型必须转换为String或String数组,反之亦然。