Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.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
Maven 为什么wsdl2java生成的代码随意使用CXF依赖项?_Maven_Cxf_Jax Ws_Wsdl2java - Fatal编程技术网

Maven 为什么wsdl2java生成的代码随意使用CXF依赖项?

Maven 为什么wsdl2java生成的代码随意使用CXF依赖项?,maven,cxf,jax-ws,wsdl2java,Maven,Cxf,Jax Ws,Wsdl2java,我使用Apache CXF 3.0.4wsdl2java通过以下命令从中生成代码: ./wsdl2java -client -exsh true -d weather -p weather -verbose url 据我所知,wsdl2java仅使用JAX-WS生成纯java代码。生成的代码在没有任何附加库/依赖项的情况下运行良好。我已经对它进行了grepped以查找任何CXF类,但它似乎没有CXF。当我将特定的CXF依赖项添加到我的pom.xml中时,问题就出现了。这种依赖关系是: org

我使用Apache CXF 3.0.4
wsdl2java
通过以下命令从中生成代码:

./wsdl2java -client -exsh true -d weather -p weather -verbose url
据我所知,
wsdl2java
仅使用JAX-WS生成纯java代码。生成的代码在没有任何附加库/依赖项的情况下运行良好。我已经对它进行了grepped以查找任何CXF类,但它似乎没有CXF。当我将特定的CXF依赖项添加到我的
pom.xml
中时,问题就出现了。这种依赖关系是:


org.apache.cxf
它是有效的。但不是为了我的工作申请。它毕竟抛出了NPE:

线程“main”javax.xml.ws.soap.SOAPFaultException中的异常:java.lang.NullPointerException ... 原因:org.apache.cxf.binding.soap.SoapFault:java.lang.NullPointerException 位于org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.unmarshalFault(Soap11FaultInInterceptor.java:86) 位于org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:52) 位于org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:41) 位于org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307) 位于org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:113) 位于org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:69) 位于org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:34) 位于org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307) 位于org.apache.cxf.endpoint.clientmpl.onMessage(clientmpl.java:802) 位于org.apache.cxf.transport.http.httpconductor$WrappedOutputStream.handleResponseInternal(httpconductor.java:1642) 位于org.apache.cxf.transport.http.httpconductor$WrappedOutputStream.handleResponse(httpconductor.java:1533) 位于org.apache.cxf.transport.http.httpconductor$WrappedOutputStream.close(httpconductor.java:1336) 位于org.apache.cxf.transport.AbstractConductor.close(AbstractConductor.java:56) 位于org.apache.cxf.transport.http.httpconductor.close(httpconductor.java:652) 位于org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderdingInterceptor.handleMessage(MessageSenderInterceptor.java:62) 位于org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307) 位于org.apache.cxf.endpoint.clientmpl.doInvoke(clientmpl.java:516) 位于org.apache.cxf.endpoint.clientmpl.invoke(clientmpl.java:425) 位于org.apache.cxf.endpoint.clientmpl.invoke(clientmpl.java:326) 位于org.apache.cxf.endpoint.clientmpl.invoke(clientmpl.java:279) 位于org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:96) 位于org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:139) ... 还有7个
提问时间

  • 为什么即使应用程序没有ApacheCXF也可以正常工作,仍然使用它
  • 在这种情况下,是否可以强制应用程序停止使用Apache CXF
  • 我不需要客户机使用这种依赖项(因为没有它们它就可以正常工作)。我也只想生产肥皂。这就是为什么我需要这个。我看到的唯一解决方案是将应用程序拆分为独立的使用者和生产者

    应用程序似乎使用不同的JAX-WS实现(甚至可能吗?)

    对。CXF有自己的jax ws提供程序,它的jar包含一个声明它的服务文件。(当JVM需要jax ws提供程序时:它在类路径上查看是否声明了非默认提供程序……以及是否有人使用它)

    为什么?? 这就是Java规范:

    在这种情况下,是否可以强制应用程序停止使用Apache CXF

    对。在类路径上创建适当的资源文件以重定向到默认实现

    详细信息:文件必须在这里:
    META-INF/services/javax.xml.ws.spi.Provider
    (如果您使用maven:简单地将其放在这里:
    /src/main/resources/META-INF/services/javax.xml.ws.spi.Provider

    并且它必须包含一行:

    javax.xml.ws.spi.Provider