客户端配置:
<!-- 输入流模型处理类 --> <bean name="domInHandler" class="org.codehaus.xfire.util.dom.DOMInHandler"/> <!-- 输入流操作处理类 --> <bean name="wss4jInHandler" class="org.codehaus.xfire.security.wss4j.WSS4JInHandler"> <property name="properties"> <props> <prop key="action">Signature Encrypt Timestamp</prop><!-- 认证类型 组合操作,空格分隔 Encrypt(解密), Signature(验证签名)--> <prop key="decryptionPropFile">insecurity_enc.properties</prop><!-- 验证签名使用的密钥库数字证书配置 --> <prop key="signaturePropFile">insecurity_sign.properties</prop><!-- 解密使用的私钥相关配置 --> <prop key="passwordCallbackClass">密码回调类</prop><!-- 密码回调实现类 --> <prop key="enableSignatureConfirmation">false</prop><!-- 如果设置, 与输出(请求)端一致 --> </props> </property> </bean> <!-- 输出流模型处理类 --> <bean id="domOutHandler" class="org.codehaus.xfire.util.dom.DOMOutHandler"/> <!-- 加密方式处理类 --> <bean id="wss4jOutHandler" class="org.codehaus.xfire.security.wss4j.WSS4JOutHandler"> <property name="properties"> <props> <prop key="action">Signature Encrypt Timestamp</prop> <!-- 请求加密用户名 --> <prop key="encryptionUser">test</prop><!-- 输入(响应)端, 用此用户名对应的密码, 解密 --> <prop key="encryptionPropFile">outsecurity_enc.properties</prop><!-- 签名 --> <prop key="signaturePropFile">outsecurity_sign.properties</prop><!-- 加密 --> <prop key="user">agent</prop><!-- 用此用户名对应的密码,加密 --> <prop key="passwordCallbackClass">密码回调类</prop> </props> </property> </bean> <!-- WebService 服务端配置 --> <bean id="client" class="org.codehaus.xfire.spring.remoting.XFireClientFactoryBean"> <property name="serviceClass"> <value>org.lei.Interface</value><!-- 服务接口 --> </property> <property name="wsdlDocumentUrl"><value>http://xx.xxx.xx.xx/services/xxx?wsdl</value><!-- WebService 服务地址 --> </property> <!-- 对输入流的操作 --> <property name="inHandlers"> <list> <ref bean="domInHandler"/><!-- 负责将STAX流模型的SOAP转换为DOM模型类 --> <ref bean="wss4jInHandler"/><!-- 对用户名和密码进行检查 --> </list> </property> <!-- 对输入流的操作 --> <property name="outHandlers"> <list> <ref bean="domOutHandler"/> <ref bean="wss4jOutHandler"/> </list> </property> </bean>
客户端的操作其实和服务端的操作基本一致, 也是要对输入和输出流分别按要求进行操作. 如设置认证类型及其顺序, 密码回调类的作用, 加密、签名属性文件的设置。
outsecurity_enc.properties……的属性文件与服务端使用的属性文件格式一致。
密码回调类:用法与服务端一致。
配置完成后, 便可使用 Spring 上下文内容对象 getBean(ID)的方法获取对象, 请求服务。
在使用过程中, 会遇到各种各样的异常情况. 这里就不详细说明了, 基本都是配置出错或缺少 Jar 包的问题导致。
-------
需要用的 Jar:
stax-api-1.0.1, jaxen-1.1-beta-9, jaxb-api-2.0, jaxb-impl-2.0.1, jaxb-xjc-2.0.1, wsdl4j-1.6.1, xfire-all-1.2.6, XmlSchema-1.4.2, wss4j-1.5.1, commons-lang-2.3, xmlsec-1.3.0, wstx-asl-3.9.2, xfire-jsr181-api-1.0-M1