xfire 集成spring的webservices

 

1. xfire + spring 发布webservice

使用xfire+spring发布webservice其实很简单,遵循一下几个步骤即可

1. 想要发布成文webservice的类,必须实现接口
2. 3个配置文件(后面详细说)

下面针对以上步骤详细说明
关于1中的要求,给个例子就明白了

User.java 代码

package com.zjh.xfire;

public class User
{
    private String name;
    private int age;
    private Set SGroupUsers = new HashSet(0);  
    private Set SUserDepts = new HashSet(0);

    public void setName(String name)
    {
        this.name=name;
    }

    public void setAge(int age)
    {
        this.age=age;
    }

    public String getName()
    {
        return name;
    }
   
    public int getAge()
    {
        return age;
    }

    public Set getSGroupUsers() {
        return this.SGroupUsers;
    }
   
    public void setSGroupUsers(Set SGroupUsers) {
        this.SGroupUsers= SGroupUsers;
    }
   
    public Set getSUserDepts() {
        return this.SUserDepts;
    }
   
    public void setSUserDepts(Set SUserDepts) {
        this.SUserDepts= SUserDepts;
    }

}

Itest.java 代码

package com.zjh.xfire;  
    
  
public interface IHello  
{  
    public String hello();  
    public String helloTo(String name);  
    public void getUserData(User user);  
}  


   

HelloImpl.java 代码

package com.zjh.xfire;  
   
  
public class HelloImpl implements IHello  
{  
  
    public String hello()  
    {  
    return "hello";  
    }  
  
    public String helloTo(String name)  
    {  
    return " hello " + name + "!";  
    }  
  
    public void getUserData(User user)
    {
      System.out.println("hello"+name);
      System.out.println("age"+age);
    }
}  


就这样写就可以了

关于三个配置文件

web.xml修改如下

xml 代码

<?xml version="1.0" encoding="UTF-8"?>  
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
  <!-- 配置文件路径 开始 -->  
    <context-param>  
        <param-name>log4jConfigLocation</param-name>  
        <param-value>/WEB-INF/classes/log4j.properties</param-value>  
    </context-param>  
    <context-param>  
        <param-name>contextConfigLocation</param-name>  
        <param-value>  
            /WEB-INF/classes/applicationContext*.xml  
            classpath:org/codehaus/xfire/spring/xfire.xml  
        </param-value>  
    </context-param>  
      
    <!-- 启动时加载SpringContextServlet -->  
    <listener>  
        <listener-class>  
            org.springframework.web.context.ContextLoaderListener  
        </listener-class>  
    </listener>  
    <listener>   
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>   
    </listener>   
  
    <listener>  
        <listener-class>  
            org.springframework.web.util.IntrospectorCleanupListener  
        </listener-class>  
    </listener>  
      
      <!-- XFire 配置 -->  
      <servlet>   
        <servlet-name>xfire</servlet-name>   
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>   
      </servlet>   
        
      <servlet-mapping>  
        <servlet-name>xfire</servlet-name>  
        <url-pattern>*.ws</url-pattern>  
      </servlet-mapping>  
        
      <welcome-file-list>  
        <welcome-file>index.jsp</welcome-file>  
      </welcome-file-list>  
</web-app>  


这里注意   classpath:org/codehaus/xfire/spring/xfire.xml  必须要写进去

xfire-servlet.xml 新建这个文件,并且和web.xml放在同一个文件夹
注意: 名称和位置都不能变(也许可以改,我不知道)



xml 代码
<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">  
<beans>   
    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">   
        <property name="urlMap">  
            <map>  
                <entry key="/testService.ws">  
                    <ref bean="test"/>    
                </entry>   
            </map>   
        </property>  
      </bean>   
        
      <bean id="test" parent="webService" class="org.codehaus.xfire.spring.remoting.XFireExporter">   
        <property name="serviceBean">   
            <ref bean="testBean"/>   
        </property>   
        <property name="serviceClass">   
            <value>com.zjh.xfire.IHello</value>   
        </property>   
      </bean>   
          
      <!-- webService base -->  
      <bean id="webService" class="org.codehaus.xfire.spring.remoting.XFireExporter" abstract="true">  
        <property name="serviceFactory">  
            <ref bean="xfire.serviceFactory" />  
        </property>  
        <property name="xfire">  
            <ref bean="xfire" />  
        </property>  
     </bean>  
</beans>  

spring 的配置文件 applicationContext-webService.xml
xml 代码
<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">    
<beans>  
    <bean id="testBean" class="com.zjh.xfire.HelloImpl"></bean>  
</beans>  

查看wsdl    http://localhost:8080/xfiretest/testService.ws?wsdl

报错相关文章:  
[XFire]如何根据WSDL生成Server Side的代码吖?
Ant脚本发布XFire WebService 客户端
xfire客户端问题
xfire插件自动生成客户端代码后,调用时报错(已解决)

推荐圈子: Tapestry
更多相关推荐 org.codehaus.xfire.fault.XFireFault: Unable to write 'com.zjh.xfire.User@1ee4648' ['com.zjh.xfire.User]. Type is unknown.
at org.codehaus.xfire.aegis.type.basic.ObjectType.handleNullType(ObjectType.java:234)
at org.codehaus.xfire.aegis.type.basic.ObjectType.writeObject(ObjectType.java:169)
at org.codehaus.xfire.aegis.AegisBindingProvider.writeParameter(AegisBindingProvider.java:200)
at org.codehaus.xfire.service.binding.AbstractBinding.writeParameter(AbstractBinding.java:273)
at org.codehaus.xfire.service.binding.WrappedBinding.writeMessage(WrappedBinding.java:90)
at org.codehaus.xfire.soap.SoapSerializer.writeMessage(SoapSerializer.java:80)
at org.codehaus.xfire.transport.http.HttpChannel.writeWithoutAttachments(HttpChannel.java:56)
at org.codehaus.xfire.transport.http.CommonsHttpMessageSender.getByteArrayRequestEntity(CommonsHttpMessageSender.java:422)
at org.codehaus.xfire.transport.http.CommonsHttpMessageSender.send(CommonsHttpMessageSender.java:360)
at org.codehaus.xfire.transport.http.HttpChannel.sendViaClient(HttpChannel.java:123)
at org.codehaus.xfire.transport.http.HttpChannel.send(HttpChannel.java:48)
at org.codehaus.xfire.handler.OutMessageSender.invoke(OutMessageSender.java:26)
at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)
郁闷了半天,google了一下,是xfire传递数据时绑定的问题
当遇到需要映射POJO或配置WebService接口方法返回类型(如集合类型)时,需要进行绑定,此时aegis的绑定为建立.aegis.xml的文件。
解决方法在User.java文件下加User.aegis.xml
<?xml version="1.0" encoding="UTF-8"?>
<mappings>  
<mapping>  
<property name="SGroupUsers" componentType="com.zjh.xfire.GroupUser"/>  
<property name="SUserDepts" componentType="com.zjh.xfire.UserDept"/>   
</mapping>  
</mappings>
再在tomcat重新发布一下工程,运行http://localhost:8080/xfiretest/testService.ws?wsdl
成功!!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值