Web services WSIT、Maven和wsimport——它们可以一起工作吗?

Web services WSIT、Maven和wsimport——它们可以一起工作吗?,web-services,maven-2,jax-ws,maven-plugin,wsit,Web Services,Maven 2,Jax Ws,Maven Plugin,Wsit,我在Maven做一个小的多模块项目。我们使用Web服务将UI与数据库层分离,多亏了jaxws-maven插件,WSDL和WS-client的创建或多或少为我们处理。(该插件本质上是wsgen和wsimport的包装器。)到目前为止还不错 当我尝试将WSIT安全性分层到图片中时,问题就出现了。NetBeans允许我轻松地生成安全元数据,但wsimport似乎完全无法处理基本身份验证安全级别之外的任何事情 以下是我们当前在Maven构建期间调用wsimport的不安全方式: <plugin&g

我在Maven做一个小的多模块项目。我们使用Web服务将UI与数据库层分离,多亏了jaxws-maven插件,WSDL和WS-client的创建或多或少为我们处理。(该插件本质上是wsgen和wsimport的包装器。)到目前为止还不错

当我尝试将WSIT安全性分层到图片中时,问题就出现了。NetBeans允许我轻松地生成安全元数据,但wsimport似乎完全无法处理基本身份验证安全级别之外的任何事情

以下是我们当前在Maven构建期间调用wsimport的不安全方式:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>jaxws-maven-plugin</artifactId>
    <version>1.10</version>
    <executions>
        <execution>
            <goals>
                <goal>wsimport</goal>
            </goals>
            <configuration>
                <wsdlUrls>
                    <wsdlUrl>${basedir}/../WebService/target/jaxws/wsgen/wsdl/WebService.wsdl</wsdlUrl>
                </wsdlUrls>
                <packageName>com.yourcompany.appname.ws.client</packageName>
                <sourceDestDir>${basedir}/src/main/java</sourceDestDir>
                <destDir>${basedir}/target/jaxws</destDir>
            </configuration>
        </execution>
    </executions>
</plugin>

org.codehaus.mojo
jaxws-maven插件
1.10
wsimport
${basedir}/./WebService/target/jaxws/wsgen/wsdl/WebService.wsdl
com.yourcompany.appname.ws.client
${basedir}/src/main/java
${basedir}/target/jaxws
我尝试过使用xauthFile、xaadditionalheaders,通过args传递javax.xml.ws.security.auth.username和密码。我还尝试从命令行使用wsimport来指向Tomcat生成的WSDL,该WSDL包含额外的安全信息。然而,似乎没有任何东西改变wsimport生成的文件的组成

所以我想我的问题是,为了获得一个兼容WSIT的客户机,我是否一直在放弃Maven和jaxws插件?有没有办法让WSIT客户端自动生成?或者我需要手动生成客户端吗

如果您需要我在这里写的以外的任何其他信息,请告诉我。我正在部署到Tomcat,尽管这似乎不是问题,因为Maven似乎很乐意将Metro拉入已部署的WAR文件中

提前谢谢

编辑:在对WSIT进行了大量的研究之后,以下是对我有效的方法

首先,使用Netbeans生成WSIT客户机。测试它以确保它工作,然后将WSIT配置文件(WSIT-client.xml和[your web service name].xml)移动到WS-client项目的META-INF目录

从安全的角度来看,项目的相关新增内容是web服务xml中的标记:

<wsp:Policy wsu:Id="WebPortBindingPolicy">
    <wsp:ExactlyOne>
        <wsp:All>
            <sc:CallbackHandlerConfiguration wspp:visibility="private">
                <sc:CallbackHandler default="wsitUser" name="usernameHandler"/>
                <sc:CallbackHandler default="changeit" name="passwordHandler"/>
            </sc:CallbackHandlerConfiguration>
            <sc:TrustStore wspp:visibility="private" location="C:\Apps\apache-tomcat-6.0.24\certs\client-truststore.jks" type="JKS" storepass="changeit" peeralias="xws-security-server"/>
        </wsp:All>
    </wsp:ExactlyOne>
</wsp:Policy>

显然,这里有一些硬编码的依赖项,我们需要在构建过程中进行管理。用户、密码、信任库的位置和peeralias都是开发默认值,并且将随着系统从开发转移到测试和生产而改变。我们正在尝试一些不同的策略来管理它,但我们可能最终会在Hudson中设置环境变量,以构建每个环境

稍微修改一下Maven的jaxws插件的配置。我们生成WSDL作为构建的一部分,因此不需要在本地引用它。以下是WS-client目标中wsimport命令的插件标记:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>jaxws-maven-plugin</artifactId>
    <version>1.12</version>
    <executions>
        <execution>
            <goals>
                <goal>wsimport</goal>
            </goals>
            <configuration>
                <wsdlUrls>
                    <wsdlUrl>${basedir}/../WebService/target/jaxws/wsgen/wsdl/WebService.wsdl</wsdlUrl>
                </wsdlUrls>
                <staleFile>${project.build.directory}/jaxws/stale/WebService.stale</staleFile>
                <packageName>com.yourcompany.appname.ws.client</packageName>
                <sourceDestDir>${basedir}/src/main/java</sourceDestDir>
                <destDir>${basedir}/target/jaxws</destDir>
            </configuration>
            <id>wsimport-generate-WebService</id>
            <phase>generate-sources</phase>
        </execution>
    </executions>
    <dependencies>
        <dependency>
            <groupId>javax.xml</groupId>
            <artifactId>webservices-api</artifactId>
            <version>2.0-b30</version>
        </dependency>
    </dependencies>
    <configuration>
        <sourceDestDir>${project.build.directory}/generated-sources/jaxws-wsimport</sourceDestDir>
        <xnocompile>true</xnocompile>
        <verbose>true</verbose>
        <extension>true</extension>
    </configuration>
</plugin>

org.codehaus.mojo
jaxws-maven插件
1.12
wsimport
${basedir}/./WebService/target/jaxws/wsgen/wsdl/WebService.wsdl
${project.build.directory}/jaxws/stale/WebService.stale
com.yourcompany.appname.ws.client
${basedir}/src/main/java
${basedir}/target/jaxws
wsimport生成web服务
生成源
javax.xml
webservicesapi
2.0-b30
${project.build.directory}/generated sources/jaxws-wsimport
真的
真的
真的

最后,当然,确保所有需要调用web服务的项目都正确设置了Metro依赖关系

您不应该为客户端提供客户端WSIT配置文件吗?您希望从
wsimport
中得到什么

编辑:正如所暗示的,WSIT文档记录了两个客户端配置文件:
WSIT client.xml
{wsdl file name}.xml
以及:

运行客户机时,这些文件需要位于类路径中,或者位于类路径根(即build/classes)中,或者位于类路径根下的META-INF目录中


转换到Maven项目,这些文件的自然位置是
src/main/resources
src/main/resources/META-INF
文件夹。就个人而言,我倾向于将它们放在META-INF中。

这其中的“公正”部分就是诀窍。今天我在这方面做了很多工作,在WSIT教程之后,我能够让NetBeans创建一个安全的WS-Client。我仍然无法让我的Maven项目愉快地使用配置,但我已经接近了。这是我的第一个安全Web服务,所以我会边学习边学习。我可能会提交我自己的答案,作为我如何做到这一点的迷你教程,这样其他人就可以避免我所经历的一些痛苦。谢谢@rtperson我不是说WSIT很琐碎,但我仍然不明白您在wsimport期间期望发生的事情。顺便说一句,提供客户端WSIT配置文件不会影响客户端工件的生成。Pascal,现在我已经看到了各个部分是如何组合在一起的,我知道wsimport不会做任何与现在不同的事情,所以我已经设法克服了这一点。但是我还没有能够通过Maven创建一个安全的WSIT客户端。我现在在家,前面没有代码,但是客户端配置文件就是META-INF中的两个,对吗?wsit_客户端配置和web服务des