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

时间:2012-03-21 18:13:45

标签: java maven soap wsdl cxf-codegen-plugin

我正在使用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>

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

3 个答案:

答案 0 :(得分:18)

<extraarg>-p</extraarg><extraarg>com.name.server.cxf</extraarg>添加到<extraargs>标记内的<wsdlOption>部分。以下(略有不同的版本)适用于我。

       <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>
                        <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>
                                    <extraarg>-p</extraarg>
                                    <extraarg>com.name.server.cxf</extraarg>
                                </extraargs>
                            </wsdlOption>
                        </wsdlOptions>
                    </configuration>
                    <goals>
                        <goal>wsdl2java</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

或者,在service-options中使用内容src/com/server/cxf/code-generation/

创建文件-p com.name.server.cxf

答案 1 :(得分:1)

这对我很有用:

<servlet>
    <description>
    </description>
    <display-name>DispatcherServlet</display-name>
    <servlet-name>DispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <description>contextClass</description>
        <param-name>contextClass</param-name>
        <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
    </init-param>
    <init-param>
        <description>contextConfigLocation</description>
        <param-name>contextConfigLocation</param-name>
        <param-value>com.xxx.yyy.jdorderspringmvcweb.config.SpringMvcConfig</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>      

答案 2 :(得分:0)

  

以上解决方案

<extraarg>-p</extraarg>
<extraarg>com.name.server.cxf</extraarg>
  

在一个包下更改生成的源的包名,因为ObjectFactory类正在覆盖它。我需要像基于wsld的包结构。随着附加包。

     

示例java类生成为com.service.name.mypackage.a,com.service.name.mypackage.b,com.service.name.mypackage.c