关于 xfire 的问题

jhwen 发布于 2013/10/18 13:52
阅读 310
收藏 1

在使用 xfire 编写 webservice 服务端代码(java)的时候,有2个问题一直在困扰着,上网找了半天,也没找到答案,可能是查找的描述不正确吧。

在这里问各位大虾。

配置文件配置如下:

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:util="http://www.springframework.org/schema/util"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd"
	default-autowire="byName">
	<!-- 数据源 -->
	<bean id="jdbcTemplate"
		class="org.springframework.jdbc.core.JdbcTemplate">
		<property name="dataSource">
			<ref bean="dataSource" />
		</property>
	</bean>
	<!-- DAO配置 -->
	<bean id="dao" class="com.techstar.common.BaseDao">
		<property name="jdbcTemplate" ref="jdbcTemplate" />
	</bean>
	<!-- 事务配置 -->
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource">
			<ref bean="dataSource" />
		</property>
	</bean>

	<!-- xfire配置 -->
	<!-- 需要import下面这个xml文件 -->
	<import resource="classpath:org/codehaus/xfire/spring/xfire.xml" />

	<!-- WebService Impl  WebService接口的实现类-->
	<bean id="userServiceImp" class="com.techstar.service.webserviceDemo.impl.UserServiceImp">
		<property name="userdao" ref="userDao"/>
	</bean>
	<!-- end -->
	
	<bean id="userService"
		class="org.codehaus.xfire.spring.remoting.XFireExporter" parent="baseWebService">
		<!-- WebService的名字 -->
		<property name="xfire" ref="xfire" />
		<property name="serviceBean" ref="userServiceImp" />
		<!-- WebService的实现类bean -->
		<property name="serviceClass"
			value="com.techstar.service.webserviceDemo.service.UserService" />
		<property name="inHandlers">
            <list>
             	<ref bean="domInHandler"/> 
            	<ref bean="addressingHandler"/>
     		</list>
     	</property>
     	<property name="outHandlers">
            <list>
             	<ref bean="domOutHandler"/> 
            	<ref bean="addressingOutHandler"/>
     		</list>
     	</property>
		<!--普通的用户名密码的方式进行WebService的验证-->
	</bean>
		
	<!-- 使用XFire导出器 -->
    <bean id="baseWebService"
        class="org.codehaus.xfire.spring.remoting.XFireExporter"
        lazy-init="false" abstract="true">
        <!-- 引用xfire.xml中定义的工厂 -->
        <property name="serviceFactory" ref="xfire.serviceFactory" />
        <!-- 引用xfire.xml中的xfire实例 -->
        <property name="xfire" ref="xfire" />
    </bean>
    
    <bean id="domInHandler" class="org.codehaus.xfire.util.dom.DOMInHandler"/>   
    <bean id="domOutHandler" class="org.codehaus.xfire.util.dom.DOMOutHandler"/>  
	<bean id="addressingHandler" class="com.techstar.common.interceptor.SoapInHandler">
	    <property name="ipFilter" value="0" />   <!-- 是否对IP进行校验 1:校验 0:不校验 -->
		<property name="ip" value="127.0.0.1;localhost" /> <!-- 允许访问的ip地址,以;隔开 -->
	</bean>
	<bean id="addressingOutHandler" class="com.techstar.common.interceptor.SoapOutHandler"/>
	<tx:annotation-driven transaction-manager="transactionManager"
		proxy-target-class="true" />
</beans>

现有如下2个问题请教:

 

1. 怎样在<soapenv:Header></soapenv:Header> 中加上自定义的元素?

服务端wsdl地址是 http://localhost:9002/techstar_application/servlet/XFireServlet/UserService?wsdl

如,我用soapUI连接我的webservice服务端后生成的xml如下

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://service.webserviceDemo.service.techstar.com" xmlns:dom="http://domain.webserviceDemo.service.techstar.com">
   <soapenv:Header/>
   <soapenv:Body>
      <ser:addUser>
         <ser:user>
            <!--Optional:-->
            <dom:userAge>?</dom:userAge>
            <!--Optional:-->
            <dom:userId>?</dom:userId>
            <!--Optional:-->
            <dom:userName>?</dom:userName>
            <!--Optional:-->
            <dom:userPassword>?</dom:userPassword>
            <!--Optional:-->
            <dom:userSex>?</dom:userSex>
         </ser:user>
         <ser:reqSeq>?</ser:reqSeq>
      </ser:addUser>
   </soapenv:Body>
</soapenv:Envelope>

比如需要在 <soapenv:Header/> 中加入reqTime和reqSequence:

<soapenv:Header>
  <dom:reqTime></dom:reqTim>
  <dom:reqSequence></dom:reqSequence>
</soapenv:Header>

2. 在我的webservice服务端程序中,有2个或多个 service,我想将这多个service整合到一个 wsdl 地址中,是否可行?如果可行,应该怎么做?

即,只通过一个wsdl地址,就可以访问不同的 service 接口。

加载中
返回顶部
顶部