我有一个合同第一的Web服务应用程序,使用wsdl通过cxd插件生成类。
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>${cxf.version}</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<sourceRoot>${project.build.directory}/generated-sources/cxf</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>${project.basedir}/src/main/resources/wsdl/hub.wsdl</wsdl>
<wsdlLocation>classpath:wsdl/hub.wsdl</wsdlLocation>
<validate>false</validate>
<validateWsdl>false</validateWsdl>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
</plugin>
我的理解是,wsdl将被打包到jars中的classes / wsdl文件夹下,因此在运行时可在类路径上使用,因此不会从远程位置下载它。
我的问题是,我需要调用的服务是用相同的协定构建的,但是对服务名称和名称空间的定义不同,但是本质上是相同的协定。我不一定能知道它们将在哪个serviceName和nameSpace上发布,我只会知道它们将在其上发布的url。
当调用serviceName和nameSpace不匹配的服务时,代码将引发以下异常:-
javax.xml.ws.WebServiceException: Could not find service named xxxx in wsdl <url> at org.apache.cxf.jaxws.ServiceImpl.initializePorts(ServiceImpl.java:173) ~[cxf-rt-frontend-jaxws-3.1.6.jar:3.1.6]
at org.apache.cxf.jaxws.ServiceImpl.initialize(ServiceImpl.java:161) ~[cxf-rt-frontend-jaxws-3.1.6.jar:3.1.6]
at org.apache.cxf.jaxws.ServiceImpl.<init>(ServiceImpl.java:129) ~[cxf-rt-frontend-jaxws-3.1.6.jar:3.1.6]
at org.apache.cxf.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:82) ~[cxf-rt-frontend-jaxws-3.1.6.jar:3.1.6]
at javax.xml.ws.Service.<init>(Service.java:77) ~[na:1.8.0_144]
是否有一种简单的方法可以打开对serviceName和nameSpace的运行时验证?
提前谢谢...。