面向服务的架构用XFIRE配备webService服务

面向服务的架构用XFIRE配置webService服务;

第一步要先在src里建一个META-INF > xfire > services.xml文件然后配置WSDL的配置文件
第一步:
<!-- 这个是xfirer的配置文件 -->
<service>
 <!-- 这个是xfire的名字 -->
 <name>HelloWorldService</name>
 <!-- 这个是名字空间 -->
 <namespace>urn:helloworld:service:xfire:itcast:cn</namespace>
 <!-- 这个是接口 -->
 <serviceClass>cn.itcast.xfire.service.HelloWorld</serviceClass>
 <!-- 这个是实现类 -->
 <implementationClass>cn.itcast.xfire.service.HelloWorldService</implementationClass>
</service>

第二步:
要配置web.xml
<servlet>
 <servlet-name>XFireServlet</servlet-name>
 <display-name>XFire Servlet</display-name>
 <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
 <!-- 通过初始化参数改变xfire配置文件的位置 ;如果改改了.那么services.xml就要和web.xml在一起-->
 <!--
  <init-param>
   <param-name>config</param-name>
   <param-value>services.xml</param-value>
  </init-param>
 -->
</servlet>
<servlet-mapping>
 <servlet-name>XFireServlet</servlet-name>
 <url-pattern>/servlet/XFireServlet/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
 <servlet-name>XFireServlet</servlet-name>
 <url-pattern>/services/*</url-pattern>
</servlet-mapping>
 
 
下面是通过jsr181的配置是通过注解来配置WSDL的返回信息:

<!-- jsr181的配置,是对于用注释方式生成webService -->
<service>
 <serviceClass>cn.itcast.xfire.service.jsr181.CustomerService</serviceClass>
 <!--  serviceFactory>jsr181</serviceFactory -->
 <!-- 这里用的是#号引用下面的Bean -->
 <serviceFactory>#jsr181ServiceFactory</serviceFactory>

</service>

<bean id="config" class="org.codehaus.xfire.aegis.type.Configuration">
 <property name="defaultExtensibleElements" value="false" />
 <property name="defaultExtensibleAttributes" value="false" />
 <property name="defaultNillable" value="false" />
 <property name="defaultMinOccurs" value="1" />
</bean>

<bean name="jsr181ServiceFactory" class="org.codehaus.xfire.annotations.AnnotationServiceFactory">
 <constructor-arg ref="xfire.transportManager" index="0" />
 <constructor-arg ref="config" index="1" type="org.codehaus.xfire.aegis.type.Configuration" />
</bean>


在cn.itcast.xfire.collection这个包下做的是返回一个对象集合和不需要序列化的的属性

要定义一个接口和实现类

<!-- 这里是我配置那个方法,那个方法就会对外提供访问 -->
EmployeeService.aegis.xml:
<mappings>
    <mapping>
        <method name="getEmployeeList">
            <return-type componentType="cn.itcast.xfire.collection.Employee"/>
        </method>
        <method name="getStringArr">
            <return-type componentType="java.lang.String"/>
        </method>
    </mapping>
</mappings>
如果要返回的集合对象就要要配置一个
Employee.aegis.xml:
<mappings>
    <mapping>
     <!-- ignore="true"表式不对外提供 这个属性不需要序列化-->
        <property name="password" ignore="true"/>
    </mapping>
</mappings>