类[com.sun.xml.ws.assembler.jaxws.HandlerTubeFactory]不实现[com.sun.xml.internal.ws.assembler.dev.TubeFactory]接口

问题描述

我尝试使用cxf-codegen-plugin从wsdl2java生成Java代码代码生成,并且可以在我的Eclipse测试类中看到响应(试图调用少量方法并正确获取结果)。 但是,当我创建这些代码的jar并移到Weblogic服务器的类路径(我只有几个jsp页面调用此wsdl2java生成代码)时,它可以正确地调用我的方法,但是每次都获得运行时异常。

注意:我也将所有依赖的jar都移到了weblogic类路径中。

以下是“例外”快照:

java.lang.RuntimeException: MASM0015: Class [ com.sun.xml.ws.assembler.jaxws.HandlerTubeFactory ] does not implement [ com.sun.xml.internal.ws.assembler.dev.TubeFactory ] interface
    at com.sun.xml.internal.ws.assembler.TubeCreator.<init>(TubeCreator.java:63)
    at com.sun.xml.internal.ws.assembler.TubelineAssemblyController.initializeTubeCreators(TubelineAssemblyController.java:116)
    at com.sun.xml.internal.ws.assembler.TubelineAssemblyController.getTubeCreators(TubelineAssemblyController.java:79)
    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 customeruserextv2.loginservice.LoginService.getLoginServiceSoap(LoginService.java:93)
    at com.ncs.wcm.LoginHelper.login(LoginHelper.java:50)
    at jsp_servlet._jsp._cs_deployed._testportal.__userlogin._jspService(__userlogin.java:322)
    at weblogic.servlet.jsp.JspBase.service(JspBase.java:35)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:295)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:260)
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:137)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:353)
    at weblogic.servlet.internal.ServletStubImpl.onAddToMapException(ServletStubImpl.java:492)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:379)
    at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:25)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
    at org.apache.logging.log4j.web.Log4jServletFilter.doFilter(Log4jServletFilter.java:64)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
    at weblogic.servlet.internal.RequestdispatcherImpl.invokeServlet(RequestdispatcherImpl.java:637)
    at weblogic.servlet.internal.RequestdispatcherImpl.include(RequestdispatcherImpl.java:508) 

下面是我正在调用并出现错误方法

public static boolean login(String userName,String password) {
          URL wsdlURL = LoginService.WSDL_LOCATION;
            LoginService ss = new LoginService(wsdlURL,SERVICE_NAME);
            LoginServiceSoap port = ss.getLoginServiceSoap(); // This is the line where throwing error
        return port.login(userName,password);
}
    

在我的POM.xml下面

<description>LoginServiceWcm</description>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.3.3</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.3.1</version>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
  
  <build>
        <finalName>LoginService</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-codegen-plugin</artifactId>
                <version>3.2.7</version>
                <executions>
                    <execution>
                        <id>generate-sources</id>
                        <phase>generate-sources</phase>
                        <configuration>
                            <sourceRoot>${project.build.directory}/generated/cxf</sourceRoot>
                            <wsdlOptions>
                                <wsdlOption>
                                    <wsdl>${basedir}/src/main/resources/wsdl/login.wsdl</wsdl>
                                    <wsdlLocation>classpath:wsdl/login.wsdl</wsdlLocation>

                                    <extraargs>
                                        <extraarg>-client</extraarg>
                                    </extraargs>
                                </wsdlOption>
                            </wsdlOptions>
                        </configuration>
                        <goals>
                            <goal>wsdl2java</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
  

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)