Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java CXF生成的客户端HandlerTubeFactory未实现TubeFactory_Java_Maven_Cxf_Wsdl2java_Cxf Client - Fatal编程技术网

Java CXF生成的客户端HandlerTubeFactory未实现TubeFactory

Java CXF生成的客户端HandlerTubeFactory未实现TubeFactory,java,maven,cxf,wsdl2java,cxf-client,Java,Maven,Cxf,Wsdl2java,Cxf Client,我使用wsdl2java生成客户机。当我运行这个客户端时 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.Tub

我使用wsdl2java生成客户机。当我运行这个客户端时

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 com.equifax.eid.soap.schema.ukidentityfraudservice.v1.wsdl.UkIdentityFraudService.getUkIdentityFraudServiceHttpPort(UkIdentityFraudService.java:72)
谢谢你,佩德罗夫。我只能通过显式重写ServiceDelegate,将其添加到我的代码中,在一个大的try-catch块中,使其工作

    Field delegateField = Service.class.getDeclaredField("delegate"); //ALLOW CXF SPECIFIC SERVICE DELEGATE ONLY!
    delegateField.setAccessible(true);
    ServiceDelegate previousDelegate = (ServiceDelegate) delegateField.get(ss);
    if (!previousDelegate.getClass().getName().contains("cxf")) {
        ServiceDelegate serviceDelegate = ((Provider) Class.forName("org.apache.cxf.jaxws.spi.ProviderImpl").newInstance())
            .createServiceDelegate(epaLoc, EPA_SERVICE_NAME, ss.getClass());
        logger.info("The " + getClass().getSimpleName() + " delegate is changed from " + "[" + previousDelegate + "] to [" +
            serviceDelegate +
            "]");
        delegateField.set(ss, serviceDelegate);
    }

错误stacktrace显示客户端正在使用JRE JAX-WS内置类
com.sun.xml.internal.WS.*
而不是CXF类


JVM选择JAX-WS实现扫描类路径,查找
javax.xml.WS.spi.Provider
。CXF提供程序位于
CXF rt前端jaxws-*.jar
,因此问题的最可能原因是
jar
未正确部署,并且不存在于类路径中


确保在服务器中真正部署并在执行时找到这些类。

错误stacktrace显示客户端使用的是JRE JAX-WS内置类
com.sun.xml.internal.WS.*
而不是CXF类


JVM选择JAX-WS实现扫描类路径,查找
javax.xml.WS.spi.Provider
。CXF提供程序位于
CXF rt前端jaxws-*.jar
,因此问题的最可能原因是
jar
未正确部署,并且不存在于类路径中


确保在您的服务器中真正部署并在执行时找到

我确实包括在CXF网站上定义的依赖项,如上所示。我不知道如何使用com.sun.xml.internal.ws.*类而不是CXF等效类来阻止它。JVM选择JAX-ws实现扫描类路径,查找
javax.xml.ws.spi.Provider
请参见CXF提供程序位于
CXF rt前端jaxws-*.jar
,因此您出现问题的最可能原因是jar是未正确部署且不在类路径中。确保maven和执行环境按预期运行。我确实包含在CXF网站上定义的依赖项,如上所示。我不知道如何使用com.sun.xml.internal.ws.*类而不是CXF等效类来阻止它。JVM选择JAX-ws实现扫描类路径,查找
javax.xml.ws.spi.Provider
请参见CXF提供程序位于
CXF rt前端jaxws-*.jar
,因此您出现问题的最可能原因是jar是未正确部署且不在类路径中。确保maven和执行环境按预期运行
URL eapURL = UkIdentityFraudService.WSDL_LOCATION;
UkIdentityFraudService ss = new UkIdentityFraudService(eapURL, EPA_SERVICE_NAME);
epaPort = ss.getUkIdentityFraudServiceHttpPort();
Map<String, Object> epaOutProps = new HashMap<String, Object>();
Client client = org.apache.cxf.frontend.ClientProxy.getClient(epaPort);
Endpoint epaCxfEndpoint = client.getEndpoint();
epaOutProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN);
epaOutProps.put(WSHandlerConstants.USER, epauser);
epaOutProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_DIGEST);
epaOutProps.put(WSHandlerConstants.PW_CALLBACK_CLASS, EpaPasswordCallback.class.getName());
WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(epaOutProps);
epaCxfEndpoint.getOutInterceptors().add(wssOut);
epaCxfEndpoint.getInInterceptors().add(new LoggingInInterceptor());
epaCxfEndpoint.getOutInterceptors().add(new LoggingOutInterceptor());
import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.WebEndpoint;
import javax.xml.ws.WebServiceClient;
import javax.xml.ws.WebServiceFeature;
import javax.xml.ws.Service;

/**
 * This class was generated by Apache CXF 3.1.7
 * 2017-01-04T10:48:02.103Z
 * Generated source version: 3.1.7
 * 
 */ 
    Field delegateField = Service.class.getDeclaredField("delegate"); //ALLOW CXF SPECIFIC SERVICE DELEGATE ONLY!
    delegateField.setAccessible(true);
    ServiceDelegate previousDelegate = (ServiceDelegate) delegateField.get(ss);
    if (!previousDelegate.getClass().getName().contains("cxf")) {
        ServiceDelegate serviceDelegate = ((Provider) Class.forName("org.apache.cxf.jaxws.spi.ProviderImpl").newInstance())
            .createServiceDelegate(epaLoc, EPA_SERVICE_NAME, ss.getClass());
        logger.info("The " + getClass().getSimpleName() + " delegate is changed from " + "[" + previousDelegate + "] to [" +
            serviceDelegate +
            "]");
        delegateField.set(ss, serviceDelegate);
    }