有几种从wsdl生成Java类的方法,例如Apache CXF,JAXB和JAX-WS。
我需要一个与maven和目录文件一起使用的解决方案。
我的问题是我有两个Maven模块A和B。一个模块(模块A)包含逻辑类,另一个模块(模块B)包含xsd文件作为资源。现在,我想从逻辑模块(模块A)生成类,并且xsd文件不应作为资源添加到此模块。
我已经创建了一个catalag.cat文件,其中包含名称空间PUBLIC并指向mavenmodule。
catalag文件的摘要:
PUBLIC "http://www.bipro.net/namespace/basis" "maven:de.bipro:bipro-common-libs:jar::!/bipro/BiPRO-Schemas/bipro-basis-2.7.0.xsd"
PUBLIC "http://www.bipro.net/namespace/beteiligungsverhaeltnis" "maven:de.birpo:bipro-common-libs:jar::!/bipro/BiPRO-Schemas/bipro-beteiligungsverhaeltnis-2.7.0.xsd"
PUBLIC "http://www.bipro.net/namespace/datentypen" "maven:de.bipro:bipro-common-libs:jar::!/bipro/BiPRO-Schemas/bipro-datentypen-2.7.0.xsd"
PUBLIC "http://www.bipro.net/namespace/evb" "maven:de.bipro:bipro-common-libs:jar::!/bipro/BiPRO-Schemas/bipro-evb-2.7.0.xsd"
PUBLIC "http://www.bipro.net/namespace/fahrzeug" "maven:de.bipro:bipro-common-libs:jar::!/bipro/BiPRO-Schemas/bipro-fahrzeug-2.7.0.xsd"
PUBLIC "http://www.bipro.net/namespace/foerderung" "maven:de.bipro:bipro-common-libs:jar::!/bipro/BiPRO-Schemas/bipro-foerderung-2.7.0.xsd"
PUBLIC "http://www.bipro.net/namespace/fragen" "maven:de.bipro:bipro-common-libs:jar::!/bipro/BiPRO-Schemas/bipro-fragen-2.7.0.xsd"
POM:
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>3.2.2</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<sourceRoot>${project.build.directory}/generated/cxf</sourceRoot>
<wsdlOptions>
<wsdlOption>
<extraargs>
<extraarg>-catalog</extraarg>
<extraarg>${basedir}/src/main/resources/bipro.cat</extraarg>
</extraargs>
<wsdl>${basedir}/src/main/resources/TransferService/TransferService_2.7.0.1.0.wsdl</wsdl>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>${project.build.directory}/generated/cxf</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
WSDL:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:wsp200212="http://schemas.xmlsoap.org/ws/2002/12/policy"
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
xmlns:bipro="http://www.bipro.net/namespace"
xmlns:wsu200207="http://schemas.xmlsoap.org/ws/2002/07/utility"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:allg="http://www.bipro.net/namespace/allgemein"
xmlns:xf="http://www.bipro.net/namespace/transfer"
xmlns:wsoma="http://www.w3.org/2007/08/soap12-mtom-policy"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:partner="http://www.bipro.net/namespace/partner"
xmlns:sepa="http://www.bipro.net/namespace/sepa"
xmlns:nachr="http://www.bipro.net/namespace/nachrichten"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:soapbind="http://schemas.xmlsoap.org/wsdl/soap/"
targetNamespace="http://www.bipro.net/namespace"
bipro:Name="TransferService_2.7.0.1.0.wsdl"
bipro:Version="2.7.0.1.0">
<wsdl:types>
<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.bipro.net/namespace"
attributeFormDefault="qualified"
elementFormDefault="qualified">
<xsd:include schemaLocation="TransferService_2.7.0.1.0.xsd"/>
</xsd:schema>
</wsdl:types>
<wsdl:message name="listShipmentsRequest">
<wsdl:part name="parameters" element="xf:listShipments"/>
</wsdl:message>
<wsdl:message name="listShipmentsResponse">
<wsdl:part name="parameters" element="xf:listShipmentsResponse"/>
</wsdl:message>
<wsdl:message name="getShipmentRequest">
<wsdl:part name="parameters" element="xf:getShipment"/>
</wsdl:message>
<wsdl:message name="getShipmentResponse">
<wsdl:part name="parameters" element="xf:getShipmentResponse"/>
</wsdl:message>
<wsdl:message name="acknowledgeShipmentRequest">
<wsdl:part name="parameters" element="xf:acknowledgeShipment"/>
</wsdl:message>
<wsdl:message name="acknowledgeShipmentResponse">
<wsdl:part name="parameters" element="xf:acknowledgeShipmentResponse"/>
</wsdl:message>
<wsdl:message name="setShipmentRequest">
<wsdl:part name="parameters" element="xf:setShipment"/>
</wsdl:message>
<wsdl:message name="setShipmentResponse">
<wsdl:part name="parameters" element="xf:setShipmentResponse"/>
</wsdl:message>
<wsdl:message name="BiproException">
<wsdl:part name="parameters" element="nachr:BiproException"/>
</wsdl:message>
<!-- Rest of definition -->
</wsdl:definitions>
XSD包含在WSDL中:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:bipro="http://www.bipro.net/namespace"
xmlns:allg="http://www.bipro.net/namespace/allgemein" xmlns:xf="http://www.bipro.net/namespace/transfer"
xmlns:partner="http://www.bipro.net/namespace/partner" xmlns:sepa="http://www.bipro.net/namespace/sepa"
xmlns:nachr="http://www.bipro.net/namespace/nachrichten" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.bipro.net/namespace" elementFormDefault="qualified"
attributeFormDefault="qualified" version="1.0" bipro:Version="2.7.0.1.0"
bipro:Name="TransferService_2.7.0.1.0.xsd">
<xsd:import namespace="http://www.bipro.net/namespace/nachrichten" />
<xsd:import namespace="http://www.bipro.net/namespace/allgemein" />
<xsd:import namespace="http://www.bipro.net/namespace/partner" />
<xsd:import namespace="http://www.bipro.net/namespace/sepa" />
<xsd:import namespace="http://www.bipro.net/namespace/transfer" />
</xsd:schema>
结果是:
[ERROR] Part <parameters> in Message <{http://www.bipro.net/namespace}acknowledgeShipmentResponse> referenced Type <{http://www.bipro.net/namespace/transfer}acknowledgeShipmentResponse> can not be found in the schemas
[ERROR] Part <parameters> in Message <{http://www.bipro.net/namespace}acknowledgeShipmentRequest> referenced Type <{http://www.bipro.net/namespace/transfer}acknowledgeShipment> can not be found in the schemas
[ERROR] Part <parameters> in Message <{http://www.bipro.net/namespace}getShipmentResponse> referenced Type <{http://www.bipro.net/namespace/transfer}getShipmentResponse> can not be found in the schemas
[ERROR] Part <parameters> in Message <{http://www.bipro.net/namespace}getShipmentRequest> referenced Type <{http://www.bipro.net/namespace/transfer}getShipment> can not be found in the schemas
[ERROR] Part <parameters> in Message <{http://www.bipro.net/namespace}BiproException> referenced Type <{http://www.bipro.net/namespace/nachrichten}BiproException> can not be found in the schemas
[ERROR] Part <parameters> in Message <{http://www.bipro.net/namespace}listShipmentsRequest> referenced Type <{http://www.bipro.net/namespace/transfer}listShipments> can not be found in the schemas
[ERROR] Part <parameters> in Message <{http://www.bipro.net/namespace}setShipmentRequest> referenced Type <{http://www.bipro.net/namespace/transfer}setShipment> can not be found in the schemas
[ERROR] Part <parameters> in Message <{http://www.bipro.net/namespace}listShipmentsResponse> referenced Type <{http://www.bipro.net/namespace/transfer}listShipmentsResponse> can not be found in the schemas
[ERROR] Part <parameters> in Message <{http://www.bipro.net/namespace}setShipmentResponse> referenced Type <{http://www.bipro.net/namespace/transfer}setShipmentResponse> can not be found in the schemas
使用Apache CXF,可以正确创建带有wsimport的服务端点接口。使用xjc,可以正确创建抽象类和具体类,但不会创建SEI。但是,为此,xsd文件必须位于同一模块中。
使用JAXB时,不会生成服务端点接口,而仅生成抽象类而不是具体类。为此,我使用了插件“ maven-jaxb2-plugin”和jaxb2-maven-plugin”。
使用JAX WS生成服务端点接口,但仅生成抽象类,而不生成具体类。另外,“ catalog.cat”文件在这里不起作用。
或者我没有正确理解它,或者我做错了什么事情。
有人可以帮我分享正确的Maven配置吗?
答案 0 :(得分:1)
搜索后,我找到了解决方法。
我将maven-jaxb2-plugin与目录文件一起使用。但是我必须从具体的类中添加缺少的名称空间。
POM:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.13.3</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<episode>false</episode>
<extension>true</extension>
<strict>false</strict>
<catalog>src/main/resources/bipro.cat</catalog>
<schemaDirectory>src/main/resources/TransferService</schemaDirectory>
<schemaIncludes>
<include>*.wsdl</include>
</schemaIncludes>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>${project.build.directory}/generated-sources/xjc</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:bipro="http://www.bipro.net/namespace"
xmlns:allg="http://www.bipro.net/namespace/allgemein"
xmlns:xf="http://www.bipro.net/namespace/transfer"
xmlns:partner="http://www.bipro.net/namespace/partner"
xmlns:sepa="http://www.bipro.net/namespace/sepa"
xmlns:nachr="http://www.bipro.net/namespace/nachrichten"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:erw="http://www.xbav.net/namespace/bipro/transfer/erweiterung"
targetNamespace="http://www.bipro.net/namespace"
elementFormDefault="qualified"
attributeFormDefault="qualified"
version="1.0"
bipro:Version="2.7.0.1.0"
bipro:Name="TransferService_2.7.0.1.0.xsd">
<!-- Hier werden die für den Service benötigten BiPRO-Modelle importiert. -->
<xsd:import namespace="http://www.bipro.net/namespace/basis" />
<xsd:import namespace="http://www.bipro.net/namespace/nachrichten"/>
<xsd:import namespace="http://www.bipro.net/namespace/allgemein" />
<xsd:import namespace="http://www.bipro.net/namespace/partner" />
<xsd:import namespace="http://www.bipro.net/namespace/sepa" />
<xsd:import namespace="http://www.bipro.net/namespace/transfer" />
<xsd:import namespace="http://www.bipro.net/namespace/transfer/gevo" />
<xsd:import namespace="http://www.bipro.net/namespace/transfer/vertrag" />
<xsd:import namespace="http://www.bipro.net/namespace/versicherung/produktmodell/leben" />
<xsd:import namespace="http://www.bipro.net/namespace/versicherung/produktmodell" />
<xsd:import namespace="http://www.xbav.net/namespace/bipro/transfer/erweiterung"/>
</xsd:schema>