标签: wsit

WSIT,Maven和wsimport - 他们可以一起工作吗?

我正在Maven工作一个小型的多模块项目.我们使用Web Services将UI与数据库层分开,并且由于jaxws-maven-plugin,我们或多或少地为我们处理了WSDL和WS客户端的创建.(该插件本质上是围绕wsgen和wsimport的包装.)到目前为止一切都很好.

当我尝试将WSIT安全性分层到图片中时,问题就来了.NetBeans允许我轻松生成安全元数据,但是wsimport似乎完全无法处理Basic-auth安全级别之外的任何事情.

这是我们当前在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>
Run Code Online (Sandbox Code Playgroud)

我尝试过使用xauthFile,xadditionalHeaders,通过args传递javax.xml.ws.security.auth.username和密码.我还尝试从命令行使用wsimport指向Tomcat生成的WSDL,它具有额外的安全信息.但是,似乎没有任何东西可以改变wsimport生成的文件的组成.

所以我想我的问题是,为了获得一个符合WSIT标准的客户端,我是不是完全放弃了Maven和jaxws插件?有没有办法让WSIT客户端自动生成?或者我需要手动生成客户端吗?

如果您需要我在此处撰写的其他信息,请与我们联系.我正在部署到Tomcat,虽然这似乎不是问题,因为Maven似乎很乐意将Metro拉入部署的WAR文件中.

提前致谢!

编辑:经过大量的WSIT游戏,这对我有用.

对于初学者,使用Netbeans生成WSIT客户端.测试它以确保它工作,然后将WSIT配置文件(wsit-client.xml和[您的Web服务名称] .xml)移动到WS客户端项目的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>
Run Code Online (Sandbox Code Playgroud)

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

摆弄一下Maven的jaxws插件的配置.我们生成WSDL作为构建的一部分,因此我们不需要在本地引用它.这是我们的WS客户端目标中的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> …
Run Code Online (Sandbox Code Playgroud)

maven-2 web-services jax-ws maven-plugin wsit

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

WSIT/Metro不了解​​Security SOAP标头

我正在使用WSIT/Metro创建一个简单的Web服务.当客户端尝试使用简单的用户名/ passowrd身份验证方案连接时,我在服务器上收到以下错误:

2010.03.31. 19:10:33 com.sun.xml.ws.protocol.soap.MUTube getMisUnderstoodHeaders
INFO: Element not understood={http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd}Security
Run Code Online (Sandbox Code Playgroud)

我不知道如何使WSIT理解安全块.

我从客户端获得的请求:

<?xml version="1.0" encoding="http://www.w3.org/2003/05/soap-envelope" standalone="no"?>
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
    <soapenv:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
        <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
            soapenv:mustUnderstand="true">
            <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
                wsu:Id="UsernameToken-1">
                <wsse:Username>admin</wsse:Username>
                <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">admin</wsse:Password>
            </wsse:UsernameToken>
        </wsse:Security>
        <wsa:To>http://localhost:11122/services/TopJtapiRemoteMethods</wsa:To>
        <wsa:MessageID>urn:uuid:D5C576F83D74F761311270055433217</wsa:MessageID>
        <wsa:Action>urn:hasCallPolling</wsa:Action>
    </soapenv:Header>
    <soapenv:Body />
</soapenv:Envelope>
Run Code Online (Sandbox Code Playgroud)

服务器的WSDL:

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions
    targetNamespace="http://soapserver.topjtapi.cti.topdesk.com"
    xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
    xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702"
    xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
    xmlns:ns="http://soapserver.topjtapi.cti.topdesk.com"
    xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:wsoap12="http://schemas.xmlsoap.org/wsdl/soap12/">
    <wsp:Policy wsu:Id="PasswordAuthPolicy">
        <wsp:All>
            <sp:SupportingTokens>
                <wsp:Policy>
                    <sp:UsernameToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
                        <wsp:Policy>
                            <sp:WssUsernameToken10 />
                        </wsp:Policy>
                    </sp:UsernameToken>
                </wsp:Policy>
            </sp:SupportingTokens>
        </wsp:All>
    </wsp:Policy>

    <wsdl:types>
        <!-- ... -->
    </wsdl:types>
    <wsdl:message name="incomingCallRequest">
        <!-- ... -->
    </wsdl:message>
    <wsdl:portType …
Run Code Online (Sandbox Code Playgroud)

java ws-security soap wsit

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

WSIT Metro版本2.3 WSRM1124错误

我们有一个在Tomcat v7服务器内的JVM(IBM jdk而不是Oracle)上运行的Java应用程序,具有以下属性

JVM信息

  • Java版本:1.6.0
  • Java供应商:IBM Corporation
  • Java规范版本:1.6
  • Java规范供应商:Sun Microsystems Inc.
  • Java规范名称:Java平台API规范
  • JVM版本:2.4
  • JVM供应商:IBM Corporation
  • JVM名称:IBM J9 VM
  • JVM规范版本:1.0
  • JVM规范供应商:Sun Microsystems Inc.
  • JVM规范名称:Java虚拟机规范
  • JVM管理规范版本:1.0
  • Java编译器:j9jit24
  • Java类格式版本:50.0

相关系统属性

  • -Dsun.nio.ch.disableSystemWideOverlappingFileLockCheck =真
  • -Doracle.net.ssl_version = 3
  • -Djavax.xml.stream.XMLInputFactory = com.ibm.xml.xlxp.api.stax.XMLInputFactoryImpl
  • -Djavax.xml.stream.XMLOutputFactory = com.ibm.xml.xlxp.api.stax.XMLOutputFactoryImpl
  • -Djavax.xml.stream.XMLEventFactory = com.ibm.xml.xlxp.api.stax.XMLEventFactoryImpl
  • -Djava.awt.headless =真
  • -Dfile.encoding = UTF-8
  • -Dcom.sun.xml.ws.fault.SOAPFaultBuilder.disableCaptureStackTrace = FALSE
  • -Dcom.sun.xml.ws.transport.http.client.HttpTransportPipe.dump =真

使用Metro(带WSIT)版本2.3来调用需要WS-Security和Ws-Reliability规范的.Net SOAP服务并获得此错误

有关服务的wsdl的信息

wsdl定义RM断言.

我想知道这个序列号是否可能是服务器已经认为已完成的旧消息,但客户端仍然认为需要重新提交并确认.此时,它会在尝试完成此消息时遇到此问题,并且无法完成其他任何消息

异常跟踪

引起:com.sun.xml.ws.rx.rm.runtime.sequence.UnknownSequenceException:WSRM1124:在com.sun.xml中没有使用id [urn:uuid:7b7df40c-0d0c-49ee-aabd-cd37ec8ce79d]注册的序列. ws.rx.rm.runtime.sequence.invm.InVmSequenceManager.getSequence(InVmSequenceManager.java:307)at com.sun.xml.ws.rx.rm.runtime.sequence.invm.InVmSequenceManager.getOutboundSequence(InVmSequenceManager.java:339 )com.sun.xml.ws.rx.rm.runtime.SourceMessageHandler.registerMessage(SourceMessageHandler.java:87)at com.sun.xml.ws.rx.rm.runtime.ClientTube.processRequest(ClientTube.java:191) )com.sun.xml.ws.api.pipe.Fiber .__ doRun(Fiber.java:1136)at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:1050)at com. sun.com.ws.api.pipe.Fiber.doRun(Fiber.java:1019)位于com.sun.xml的com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:877).位于com.sun.xml.ws.client.sei的com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:174)中的ws.client.Stub.process(Stub.java:464).在c处的SyncMethodHandler.invoke(SyncMethodHandler.java:108)om.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:91)位于com.sun的com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:154).代理.$ Proxy85.get(未知来源)

地铁日志

Jul-19-2014 15:22:26.581(ajp-bio-8009-exec-4:28)FINER [com.sun.xml.ws.api.pipe.Fiber ___ doRun] engine-Metro/2.3(tags/2.3-7528) ; 2013-04-29T19:34:10 + …

java web-services java-metro-framework wsit

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