标签: cxf-codegen-plugin

使用Maven从WSDL生成Java时指定包名称

我正在使用maven脚本生成我需要与WCF服务通信的Java代码.我已经进行了沟通工作,并准备将我的maven脚本及其生成的代码与项目中的其余Java代码集成.

但是,我无法让maven生成具有我想要的正确包名的代码.从我在网上看到的,我应该使用标签,我已经看到了两个可能的地方.我已经包含了我认为需要进入的脚本部分,以及它们都存在.但是,这些标记不会产生任何影响,代码生成就像没有它们一样

        <plugin>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-codegen-plugin</artifactId>
            <version>${cxf.version}</version>
            <configuration>
                        <packageName>com.name.server.cxf</packageName>                      
                    <sourceRoot>src/com/server/cxf</sourceRoot>
                        <wsdlOptions>
                            <wsdlOption>
                                <wsdl>src/com/server/cxf/code-generation/service.xml</wsdl>
                                <bindingFiles>
                                    <bindingFile>src/com/server/cxf/code-generation/javabindings.xml</bindingFile>
                                </bindingFiles> 
                                <extraargs>
                                    <extraarg>-validate</extraarg>
                                    <extraarg>-client</extraarg>
                                    <extraarg>-verbose</extraarg>
                                    <extraarg>-xjc-verbose</extraarg>
                                </extraargs>
                            </wsdlOption>
                        </wsdlOptions>
                        <verbose />
                    </configuration>
            <executions>
                <execution>
                    <id>generate-sources</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>wsdl2java</goal>
                    </goals>
                    <configuration>
                        <packageName>com.name.server.cxf</packageName>      
                    </configuration>
                </execution>
            </executions>
        </plugin>
Run Code Online (Sandbox Code Playgroud)

也许我使用的是错误的标签,或者它可能是在错误的地方?

java soap wsdl maven cxf-codegen-plugin

12
推荐指数
1
解决办法
2万
查看次数

如何让 cxf-codegen-plugin 从 jakarta.xml.ws 生成 Web 服务?

从 Java 8 迁移到 Java 11。

将 cxf-codegen-plugin 从版本 3.2.0 更新到 3.3.6。

插件仍然使用 javax.jws.* 中的包(而不是 jakarta.jws.* 中的包)从 wsdl 文件生成 Java 存根:

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;

/**
 * This class was generated by Apache CXF 3.3.6
 * 2020-08-12T19:22:40.406+02:00
 * Generated source version: 3.3.6
 *
 */
Run Code Online (Sandbox Code Playgroud)

我是否误认为 javax.jws 已弃用,应该更改为 jakarta.jws?

如何使用所需的包完成代码生成?

java wsdl2java cxf-codegen-plugin java-11

10
推荐指数
2
解决办法
7106
查看次数

CXF codegen maven插件无法使用OpenJDK 11

我一直在使用JDK 9&10和CXF codegen插件3.2.5和3.2.6没有问题,但今天我正在尝试将我的代码库从Oracle JDK 10更新到OpenJDK 11 build 28,但我总是得到同样的错误:

[INFO] Error occurred during initialization of boot layer
[INFO] java.lang.module.FindException: Module java.xml.ws not found
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.747 s
[INFO] Finished at: 2018-10-17T16:38:38+02:00
[INFO] Final Memory: 17M/60M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.cxf:cxf-codegen-plugin:3.2.6:wsdl2java (cerberus-wsdl) on project cerberus: 
[ERROR] Exit code: 1
[ERROR] Command line was: /opt/prod_jdk/bin/java --add-modules java.activation,java.xml.bind,java.xml.ws --add-exports=java.xml.bind/com.sun.xml.internal.bind.v2.runtime=ALL-UNNAMED --add-exports=jdk.xml.dom/org.w3c.dom.html=ALL-UNNAMED --add-exports=java.xml/com.sun.org.apache.xerces.internal.impl.xs=ALL-UNNAMED --add-exports=java.xml.bind/com.sun.xml.internal.bind.marshaller=ALL-UNNAMED --add-opens java.xml.ws/javax.xml.ws.wsaddressing=ALL-UNNAMED --add-opens java.base/java.security=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens …
Run Code Online (Sandbox Code Playgroud)

java maven cxf-codegen-plugin java-11

9
推荐指数
1
解决办法
7098
查看次数

我想在CXF codegen上添加@XmlRoot注释

我有一个WSDL文件,其中包含以下条目:

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="urn:CP_Ablakido" xmlns:s0="urn:CP_Ablakido" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <wsdl:types>
    <xsd:schema elementFormDefault="qualified" targetNamespace="urn:CP_Ablakido">
      <xsd:element name="GetList_11" type="s0:InputMapping1"/>
      <xsd:complexType name="InputMapping1">
        <xsd:sequence>
          <xsd:element name="Qualification" type="xsd:string"/>
          <xsd:element name="startRecord" type="xsd:string"/>
          <xsd:element name="maxLimit" type="xsd:string"/>
        </xsd:sequence>
      </xsd:complexType>
      <xsd:element name="GetList_11Response" type="s0:OutputMapping1"/>
      <xsd:complexType name="OutputMapping1">
        <xsd:sequence>
          <xsd:element maxOccurs="unbounded" name="getListValues">
            <xsd:complexType>....
Run Code Online (Sandbox Code Playgroud)

我使用CXF Codegen插件进行以下设置:

<plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <executions>
        <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <configuration>
                <sourceRoot>${basedir}/target/generated-sources/wsdl2java</sourceRoot>
                <encoding>UTF-8</encoding>
            </configuration>
            <goals>
                <goal>wsdl2java</goal>
            </goals>
        </execution>
    </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

生成的java代码如下所示:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "OutputMapping1", propOrder = {
    "getListValues"
})
public class OutputMapping1 {

    @XmlElement(required = true)
    protected List<OutputMapping1 …
Run Code Online (Sandbox Code Playgroud)

java cxf jaxb cxf-codegen-plugin

6
推荐指数
1
解决办法
4791
查看次数

apache cxf-codegen-plugin wsdl2java相对wsdlLocation

当我指定每个文件时,我能够使用带有相对wsdlLocation的生成类,例如 <wsdlOptions> <wsdlOption> <wsdl>${basedir}/src/main/resources/sample.wsdl</wsdl> <wsdlLocation>classpath:wsdl/sample.wsdl</wsdlLocation> </wsdlOption> </wsdlOptions>

相反,我想使用<wsdlRoot>所以我不需要指定生成类的每个wsdl.

例如

<wsdlRoot>${basedir}/src/main/resources/wsdl</wsdlRoot> <includes> <include>*.wsdl</include> </includes>

这适用于为目录中的每个wsdl生成类,但是,生成的类中的wsdlLocation是wsdl在我的机器上的绝对路径.我想要一个相对路径,所以代码更便携.使用wsdlRoot时是否可以指定相对wsdlLocation?

谢谢

wsdl cxf wsdl2java maven cxf-codegen-plugin

6
推荐指数
1
解决办法
637
查看次数

cxf-codegen-plugin 4.0.0 忽略绑定文件

我从基于cxf-codegen-plugin. 我使用额外的绑定

  • 更改包
  • 使用Date而不是XmlGregorianCalender

这适用于版本 3.5.5

当我切换到 4.0.0 时,这不再起作用(默认包并被XmlGregorianCalender使用)。我在迁移指南中找不到任何相关内容。

这是我的配置

pom.xml

<plugin>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-codegen-plugin</artifactId>
                <version>4.0.0</version>
                <executions>
                    <execution>
                        <id>generate-sources</id>
                        <phase>generate-sources</phase>
                        <configuration>
                            <wsdlOptions>
                                <wsdlOption>
                                    <wsdl>https:url?wsdl</wsdl>
                                    <bindingFiles>
                                        <bindingFile>${basedir}/src/main/resources/bindings.xml</bindingFile>
                                    </bindingFiles>
                                    <extraargs>
                                        <extraarg>-verbose</extraarg>
                                        <extraarg>-p</extraarg>
                                        <extraarg>http://url/service=com.some.package</extraarg>
                                        <extraarg>-xjc-Xts:style:org.apache.commons.lang3.builder.ToStringStyle.DEFAULT_STYLE</extraarg>
                                    </extraargs>
                                </wsdlOption>
                            </wsdlOptions>
                        </configuration>
                        <goals>
                            <goal>wsdl2java</goal>
                        </goals>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>org.apache.cxf.xjcplugins</groupId>
                        <artifactId>cxf-xjc-ts</artifactId>
                        <version>4.0.0</version>
                    </dependency>
                </dependencies>
            </plugin>
Run Code Online (Sandbox Code Playgroud)

绑定

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<jaxb:bindings xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
               xmlns:xsd="http://www.w3.org/2001/XMLSchema"
               xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
               xmlns:jaxws="http://cxf.apache.org/jaxws"
               version="2.1">

    <jaxb:bindings schemaLocation="https://url.file.xsd"
                   node="/xsd:schema">
        <jaxb:schemaBindings>
            <jaxb:package name="com.some.package.dto" />
        </jaxb:schemaBindings>
        <jaxb:globalBindings>
            <jaxb:javaType name="java.util.Date"
                           xmlType="xsd:dateTime"
                           parseMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.parseDateTime"
                           printMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.printDateTime" …
Run Code Online (Sandbox Code Playgroud)

wsdl2java cxf-codegen-plugin

6
推荐指数
2
解决办法
2683
查看次数

maven wsdl2java 配置无法正常工作

我希望通过 maven 执行 wsdl2java 并尝试了几种不同的方法但没有完全成功。我做的第一种方式:

<plugin>  
    <groupId>org.codehaus.mojo</groupId>  
    <artifactId>exec-maven-plugin</artifactId>  
    <version>1.1</version>  
    <executions>  
        <execution>  
            <phase>compile</phase>  
            <goals>  
                <goal>java</goal>  
            </goals>  
            <configuration>  
                <mainClass>org.apache.axis.wsdl.WSDL2Java</mainClass>  
                <arguments>  
                    <argument>-client</argument>  
                    <argument>-o</argument>  
                    <argument>gensrc</argument>  
                    <argument>wsdl/JobAPIWebWrapped.wsdl</argument>  
                </arguments>  
            </configuration>  
        </execution>  
    </executions>  
</plugin>
Run Code Online (Sandbox Code Playgroud)

由于对 org.apache.axis.wsdl.WSDL2Java 的调用,此版本将创建我正在寻找的确切结构,但不会继续使用除此之外的任何其他 maven 插件。它以执行 main 或类似的东西来结束日志。

我尝试过的另一种方法:

<plugin>  
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <version>3.1.2</version>
    <executions>
        <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <configuration>
                <sourceRoot>gensrc</sourceRoot>
                <wsdlOptions>
                    <wsdlOption>
                        <wsdl>wsdl/JobAPIWebWrapped.wsdl</wsdl>
                    </wsdlOption>
                </wsdlOptions>
            </configuration>
            <goals>
                <goal>wsdl2java</goal>
            </goals>
        </execution>
    </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

此执行的问题在于它生成的 java 文件比之前执行的更高。我检查了这个更大的文件集的兼容性,发现它可以正常工作,但想找到一种方法来强制它使用与第一个示例相同的 java 类来执行。但是,此版本将完成并允许我继续使用 maven 调用的以下插件。

第三:

<plugin> 
    <groupId>org.apache.axis</groupId>
    <artifactId>wsdl2java-maven-plugin</artifactId>
    <version>1.4.1-SNAPSHOT</version>
    <executions>
        <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <configuration>
        <implementationClassName>org.apache.axis.wsdl.WSDL2Java</implementationClassName>
            </configuration>
        </execution>
    </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

这个版本甚至没有被识别......想知道我是否错误地调用了插件,因为它甚至没有出现在任何带有详细日志记录的地方。 …

wsdl2java maven exec-maven-plugin cxf-codegen-plugin

5
推荐指数
1
解决办法
1万
查看次数

如何在一次执行下使用适用于 Maven 的 Apache CXF 代码生成插件为多个服务生成源

我目前正在使用 Maven 的 Apache CXF 代码生成插件(版本 3.1.1)从我们的客户端提供的 WSDL 生成源代码。我指定了 wsdl2java 目标,并且我想为多个服务生成代码。我知道您可以<serviceName><wsdlOption>标签下指定 a ,但是当我尝试放置多个<serviceName>,或者甚至<wsdlOption>使用<wsdl>具有不同的相同值创建另一个时<serviceName>,它似乎忽略其中一个,而只为一项服务生成类。

我发现解决此问题的唯一方法是创建另一个相同的<execution>块并更改<serviceName>. 我做错了什么,或者这是唯一的方法吗?这是一个的整体设置<execution>(出于隐私考虑,路径和服务名称已更改):

<execution>
    <id>generate-sources-a</id>
    <phase>generate-sources</phase>
    <configuration>
        <encoding>UTF-8</encoding>
        <defaultOptions>
            <bindingFiles>
                <bindingFile>binding.xjb</bindingFile>
            </bindingFiles>
        </defaultOptions>
        <sourceRoot>${project.build.directory}/generated-sources</sourceRoot>
        <wsdlRoot>${project.build.directory}/wsdl</wsdlRoot>
        <includes>
            <include>Path/To/WSDL/MyWSDL.wsdl</include>
        </includes>
        <wsdlOptions>
            <wsdlOption>
                <wsdl>${project.build.directory}/wsdl/Path/To/WSDL/MyWSDL.wsdl</wsdl>
                <serviceName>ServiceA</serviceName>
            </wsdlOption>
        </wsdlOptions>
    </configuration>
    <goals>
        <goal>wsdl2java</goal>
    </goals>
</execution>
Run Code Online (Sandbox Code Playgroud)

我试过这两个:

<wsdlOptions>
    <wsdlOption>
        <wsdl>${project.build.directory}/wsdl/Path/To/WSDL/MyWSDL.wsdl</wsdl>
        <serviceName>ServiceA</serviceName>
        <serviceName>ServiceB</serviceName>
    </wsdlOption>
</wsdlOptions>
Run Code Online (Sandbox Code Playgroud)

...和这个(在http://cxf.apache.org/docs/maven-cxf-codegen-plugin-wsdl-to-java.html 的示例 4 中使用):

<wsdlOptions>
    <wsdlOption>
        <wsdl>${project.build.directory}/wsdl/Path/To/WSDL/MyWSDL.wsdl</wsdl>
        <serviceName>ServiceA</serviceName>
    </wsdlOption>
    <wsdlOption>
        <wsdl>${project.build.directory}/wsdl/Path/To/WSDL/MyWSDL.wsdl</wsdl> …
Run Code Online (Sandbox Code Playgroud)

java wsdl2java pom.xml maven cxf-codegen-plugin

5
推荐指数
1
解决办法
1456
查看次数

cxf-codegen-plugin端口到Gradle

我试图复制这个插件在Gradle中的作用.如果我执行:

./wsdl2java -encoding UTF-8 -d /src/target/generated-sources/cxf -fe jaxws21
-sn UserSoapServicePorts -faultSerialVersionUID 1 -xjc-Xannotate 
-p http:... -p urn:... -p urn:... -p urn:... -p urn:h... -p urn:... 
-p urn:... -p urn:... 
-verbose /src/xmlTemp/user-soap-v1.wsdl 
Run Code Online (Sandbox Code Playgroud)

...然后我得到:

an 22, 2016 3:51:05 PM org.apache.cxf.wsdl11.WSDLServiceBuilder checkForWrapped
INFO: Operation {urn:stuff:wsdl:person:v1}doSomething cannot be unwrapped, input message must reference global element declaration with same localname as operation
Run Code Online (Sandbox Code Playgroud)

据我所知,尽管线条相同.什么想法可能是错的?

cxf gradle cxf-codegen-plugin

5
推荐指数
2
解决办法
5550
查看次数

使用 WSDL2Java 从 WSDL 生成的源使用 java 11 上已弃用的 API javax xml ws 生成类

在我的项目中,我使用的是 java 11。

基于 WSDL 文件,我使用cxf-codegen-pluginMaven 插件生成代码类。java 11 上生成的类、使用javax.xml.ws.*和其他 API。

例子 :

extends Service 来自该库的生成类之一javax.xml.ws.Service在 java 11 上并未弃用,但我遇到了兼容性错误。

java.lang.IllegalArgumentException: JAXP09020005: The specified argument 'classpath:/schemas/wsdl' (case sensitive) for 'setRewritePrefix' is not valid.
    at java.xml/javax.xml.catalog.CatalogMessages.reportIAE(CatalogMessages.java:140) ~[na:na]
    at java.xml/javax.xml.catalog.BaseEntry.verifyURI(BaseEntry.java:231) ~[na:na]
    at java.xml/javax.xml.catalog.RewriteSystem.setRewritePrefix(RewriteSystem.java:65) ~[na:na]
    at java.xml/javax.xml.catalog.RewriteSystem.<init>(RewriteSystem.java:47) ~[na:na]
    at java.xml/javax.xml.catalog.CatalogReader.startElement(CatalogReader.java:190) ~[na:na]
    at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:510) ~[na:na]
    at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:183) ~[na:na]
    at java.xml/com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:351) ~[na:na]
    at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2708) ~[na:na]
    at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605) ~[na:na]
    at java.xml/com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:112) ~[na:na]
    at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:534) ~[na:na]
    at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:888) ~[na:na]
    at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:824) ~[na:na]
    at …
Run Code Online (Sandbox Code Playgroud)

java wsdl wsdl2java cxf-codegen-plugin java-11

5
推荐指数
1
解决办法
4758
查看次数