<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>无间</title>
    <description></description>
    <link>http://chengyao.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>weblogic8.1下配置xfire开发webservice环境</title>
        <author>ioriyagami808</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chengyao.javaeye.com">ioriyagami808</a>&nbsp;
          链接：<a href="http://chengyao.javaeye.com/blog/114878" style="color:red;">http://chengyao.javaeye.com/blog/114878</a>&nbsp;
          发表时间: 2007年08月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          配置步骤：<br /><br />一、             工具准备：<br /><br />Eclipse3.2<br /><br />Myeclipse5.0<br /><br />Weblogic8.1<br /><br />开发环境：<br /><br />windows XP<br /><br /> jdk1.3<br />         eclipse3.2.1 + myeclipse5.0<br />         weblogic 8.1 sp2（独自运行jdk1.4）<br /><br /> <br /><br />二、类包准备：<br /><br />Qname.jar 下载地址：<a href="http://docs.codehaus.org/download/attachments/27836/qname.jar?version=1" target="_blank">http://docs.codehaus.org/download/attachments/27836/qname.jar?version=1</a><br /><br />  <br /><br />三、             Weblogic8部署注意地方<br /><br />A、 WebLogic 8 支持的是 J2EE 1.3，也就是 Servlet 2.3 规范。若在 MyEclipse 中建立 Web Project 时选择了 J2EE 1.4[default]，在部署的时候就会出现异常，提示部署描述符 web.xml 是畸形的，也就是未通过 DTD 检验。因为 J2EE 1.4 使用的是 Servlet 2.4 规范，这直接体现在 web.xml 部署描述符的头部引用中。这就是有些朋友遇到的，部署在 Tomcat 和 JBoss 中能够运行的 JSP 程序，部署到 WebLogic 8 就无法运行的原因之一。如下图：<br /><br /> <br /><br />Servlet 2.3 规范生成的 web.xml 头部：<br /><pre name="code" class="java">
&lt;?xml version="1.0" encoding="UTF-8"?> &lt;!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3/  /EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
&lt;web-app>
...
&lt;/web-app>
</pre><br /><br />Servlet 2.4 规范生成的 web.xml 头部：<br /><pre name="code" class="java">
&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
<a href="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" target="_blank">http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd</a>">
...
&lt;/web-app>
</pre><br /><br />B、 解决这个问题，需要将 WebLogic 升级到 9.2 版本；或者使用 J2EE 1.3。<br /><br />C、 如果使用继续使用weblogic8.1的，则需要对weblogic自带的weblogic.jar包的xml命名包替换成：Qname.jar。否则web启动时会报错。服务启动不了。<br /><br />D、若在上一个问题选择了 J2EE 1.3 进行开发后，在部署时会出现另外的异常，提示“Unsupported major.minor version 49.0”—— 又是版本问题，这次是由于 JDK 版本不支持造成的。WebLogic 8 不支持 JDK 1.5，由 JDK 1.5 编译的程序无法部署到只支持 JDK 1.4 的服务器上运行。解决的办法也有两个：用 JDK 1.4 重新编译；或者换用支持 JDK 1.5 的服务器，也就是升级到 WebLogic 9.2。<br /><br /> <br /><br />四、             开始配置：<br /><br />1、  建立webservice项目时，需要选择J2EE1.3，不能选择J2EE1.3[default]。  <br /><br />2、  默认下一步。<br /><br />3、  进入Project Library Configuration页面，默认选择MyEclipse Libraries类包。<br /><br />下面提供的选择项中，在原来的基础上，把Xfire1.1 HTTP Client Libraries也选上。<br /><br />4、  单击“Finish”按钮<br /><br />5、  单击“New Web Service”按钮。建立新web服务端。<br /><br />6、  进入接口定义页面。<br /><br /> <br /><br />填完。点击“Finish”按钮。<br /><br /> <br /><br />    <br /><br />     7、则可以查看到“WebRoot－>WEB-INF”目录下存在web.xml文件，样式如下<br /><pre name="code" class="java">
    &lt;?xml version="1.0" encoding="UTF-8"?>

&lt;!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

&lt;web-app>

  &lt;servlet>

    &lt;servlet-name>XFireServlet&lt;/servlet-name>    &lt;servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet&lt;/servlet-class>

    &lt;load-on-startup>0&lt;/load-on-startup>

  &lt;/servlet>

  &lt;servlet-mapping>

    &lt;servlet-name>XFireServlet&lt;/servlet-name>

    &lt;url-pattern>/servlet/XFireServlet/*&lt;/url-pattern>

  &lt;/servlet-mapping>

  &lt;servlet-mapping>

    &lt;servlet-name>XFireServlet&lt;/servlet-name>

    &lt;url-pattern>/services/*&lt;/url-pattern>

  &lt;/servlet-mapping>

  &lt;/web-app>
</pre><br />7、  进入根目录下“Web Services”存在“webservice.xml”文件。其内容：<br /><pre name="code" class="java">
      &lt;beans xmlns="http://xfire.codehaus.org/config/1.0">

        &lt;service>

         &lt;name>xxx&lt;/name>

       &lt;serviceClass>xxxx&lt;/serviceClass>

&lt;implementationClass>xxxx&lt;/implementationClass>

       &lt;style>xx&lt;/style>

       &lt;use>xx&lt;/use>

       &lt;scope>xxx&lt;/scope>

    &lt;/service>&lt;/beans>
</pre><br />8、  在“WebRoot－>WEB－INF－>lib”目录加入包：Qname.jar<br /><br />9、  在weblogic启动命名文件：startWeblogic.xml文件中加上该包的执行路径。<br /><br />……….<br /><br />set CLASSPATH=D:\qname.jar;<br /><br />……. <br /><br /> <br /><br />    <br /><br /> <br /><br />     12、部署工程。<br /><br /> <br /><br />       13、配置完成后选择“OK”。部署成功。<br /><br />       14、启动服务器器。可以在对应的IE页面地址栏输入：<br /><br />          <a href=" http://loaclhost:7001/services/testservice?wsdl" target="_blank"> http://loaclhost:7001/services/testservice?wsdl</a><br /><br />           如有现时xml格式的内容，则表明成功，否则需要检查上述步骤是否出正常。
          <br/>
          <span style="color:red;">
            <a href="http://chengyao.javaeye.com/blog/114878#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 21 Aug 2007 15:02:00 +0800</pubDate>
        <link>http://chengyao.javaeye.com/blog/114878</link>
        <guid>http://chengyao.javaeye.com/blog/114878</guid>
      </item>
      <item>
        <title>Xfire的aegis绑定方式配置小结</title>
        <author>ioriyagami808</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chengyao.javaeye.com">ioriyagami808</a>&nbsp;
          链接：<a href="http://chengyao.javaeye.com/blog/85622" style="color:red;">http://chengyao.javaeye.com/blog/85622</a>&nbsp;
          发表时间: 2007年06月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          首先说明，aegis为XFire默认的绑定方式，何时需要绑定？<br />当使用JDK1.4时，或者对JDK1.5的范型和注释不是很熟悉的情况下，当遇到需要映射POJO或配置WebService接口方法返回类型(如集合类型)时，需要进行绑定，此时aegis的绑定为建立.aegis.xml的文件。<br /><br />1.当封装的接口类中，某方法返回集合类型时，aegis的绑定方式：<br />  例如，需要将以下接口封装<br /><pre name="code" class="java">
public interface UserInfo {

	public User findUserInfosByUserID(String userUniqueID);
	public String test();
	public Collection findRoleInfosByUserID(String userUniqueID);
	}

</pre><br />观察此接口，受限我们看findRoleInfosByUserID方法，此方法传入String,返回类型为Collection，此时，我们即需要配置findRoleInfosByUserID方法。<br />配置步骤，在接口类的同一包下建立和接口名相同的aegis.xml文件，即UserInfo.aegis.xml文件。<br />UserInfo.aegis.xml<br /><pre name="code" class="java">
&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;mappings>
	&lt;mapping>
		&lt;method name="findRoleInfosByUserID">
			&lt;return-type
				componentType="com.tongtech.bjvsp.sysmng.entity.Role" />
		&lt;/method>
	&lt;/mapping>
&lt;/mappings>

</pre><br />其中，method代表需要配置的方法名，由于XFire可以支持基本类型，针对集合类型时，需要配置，返回类型或参数类型为基本类型时不需要特殊配置。<br /><span style="color: blue">&lt;return-type/></span>为配置返回类型，<span style="color: blue">componentType</span>属性代表返回的集合中所包含的类，此类可以是自定义的对象，也可以是基本类型,例如<span style="color: blue">java.lang.String</span><br />此时，findRoleInfosByUserID方法配置完毕<br /><br />PS，还拿此接口举例，如接口中，findRoleInfosByUserID接受的参数也为集合类型，那么需要在<span style="color: blue">&lt;method>&lt;/method></span>之间再加入以下代码<br /><pre name="code" class="java">
&lt;parameter index="0" componentType="java.lang.String"/>
</pre><br />index="0"代表方法的参数的序号，0即第一个参数。<br />componentType代表集合参数内包含的类型，也可以为自定义对象，例如User<br />注意，如果findRoleInfosByUserID方法有两个参数，一个比如为String，一个为集合，那么只需要配置集合参数即可。<br /><br />二。映射POJO<br />比如还是上面的UserInfo接口，第一个方法<br />public User findUserInfosByUserID(String userUniqueID);<br />此时，返回类型为User<br />如果User中仅为基本类型，例如String，int等基本类型，无需配置User<br /><br />但如果User中还包含有其他类型，比如包含有Set，List，那么需要对其进行配置<br />比如User代码如下：<br /><pre name="code" class="java">
public class User  implements java.io.Serializable {


    // Fields    

     private Integer userId;
     private String loginName;
     private String userPassword;
     private Integer SOrder;
     private String userCa;
     private String userName;
     private String userTel;
     private String userEmail;
     private String ZNote;
     private String userCode;
     private DicSystemAuth SDicSystemAuth;
     private Set SGroupUsers = new HashSet(0);
     private Set SUserDepts = new HashSet(0);
}
</pre><br />此时User中还包含有SDicSystemAuth的对象，以及SUserDepts等Set集合<br />这种情况主要可能会出现在使用Hibernate，映射一对一，一对多表时<br />这里要特别注意<br />那么此时我们需要对User进行aegis绑定，控制POJO和XML的映射<br />配置方法：<br />在User对象所在包内建立User.aegis.xml<br />由于User中包含Set，那么只需要对集合做设置即可，DicSystemAuth下面单独讨论<br /><br />我们可以分两次来配置，分别讲解<br />1,<br /><pre name="code" class="java">
&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;mappings xmlns:my="http://my.bjvsp.tongtech.com">
&lt;mapping name="my:User">
&lt;property name="SGroupUsers" componentType="com.tongtech.bjvsp.sysmng.entity.GroupUser"/>
&lt;property name="SUserDepts" componentType="com.tongtech.bjvsp.sysmng.entity.UserDept"/>
&lt;/mapping>
&lt;/mappings>
</pre><br />此时，配置文件中配置了两个Set集合，componentType明确定义了Set集合内包含的内容<br />此时，DicSystemAuth即便是自定义的对象类，由于不是集合，XFire也可以对其正确映射。<br /><br />2<br /><pre name="code" class="java">
&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;mappings xmlns:my="http://my.bjvsp.tongtech.com">
&lt;mapping name="my:User">

&lt;property name="SGroupUsers" ignore="true"/>
&lt;property name="SUserDepts" ignore="true"/>
&lt;property name="SDicSystemAuth" ignore="true"/>
&lt;/mapping>
&lt;/mappings>
</pre><br />第二种方式，定义了三个字段，并使用了ignore属性，表示这三个属性不能被序列化。<br />那么，何时会遇到类似于User中Set集合，不被序列化呢？<br /><br />当客户端访问本地代理时，如果User表内包含有其他表的关联时，如果基于hibernate的持久层，由于hibernate的惰性加载机制，加载User时仅会将User中的属性值加载而不会加载关联表中的值，比如set和SDicSystemAuth对象等，当客户端访问本地代理，序列化User对象时，如果没有设置关联字段是否序列化，那么它会将其全部序列化，但当序列化时，由于hibernate的惰性加载，此时Session已经关闭，那么在序列化关联字段的时候，就会出现session was close的异常。因此解决办法是在aegis绑定时制定关联字段的ignore属性设置为true。<br /><br />还有一种解决办法，就是仍然按照第一种配置方式，明确指明关联的Set集合内的对象，但在执行序列化前，session关闭之前，提前将关联字段内的值初始化。<br />用Hibernate.initialize初始化<br /><br /><br />最后补充一小句<br />XFire对于自定义的对象可以聪明的找到，前提是它不包含集合<br />例如你的方法返回一个User对象<br />User中都是基本类型，或者User中包含有Dept对象的引用，都没有问题。<br />但如果你不希望加载user时序列化Dept出问题，就乖乖把dept初始化或将dept的ignore属性设置为true<br /><br />本篇文章没什么头绪，想哪儿写哪儿，主要是对这段时间的xfire的基本的学习的一个小结，所以没有太注重词语搭配，以看懂为主。。。有时间再来整理整理
          <br/>
          <span style="color:red;">
            <a href="http://chengyao.javaeye.com/blog/85622#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 01 Jun 2007 11:20:33 +0800</pubDate>
        <link>http://chengyao.javaeye.com/blog/85622</link>
        <guid>http://chengyao.javaeye.com/blog/85622</guid>
      </item>
      <item>
        <title>Ant脚本发布XFire WebService 客户端</title>
        <author>ioriyagami808</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chengyao.javaeye.com">ioriyagami808</a>&nbsp;
          链接：<a href="http://chengyao.javaeye.com/blog/85381" style="color:red;">http://chengyao.javaeye.com/blog/85381</a>&nbsp;
          发表时间: 2007年06月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <span style="color: darkblue">可以不使用XFire的eclipse插件，直接使用ANT脚本，和XFire1.2.6的jar包即可生成WebService客户端<br />目录结构为：<br />build.xml<br />WsGen的文件夹(此处文件夹名随意，ant脚本中对应该文件夹名即可)<br />WsGen下建立client，lib文件夹，lib下置放xFire1.2.6所有jar包</span><br /><span style="color: brown">Build.xml代码：</span><pre name="code" class="java">
&lt;project name="XFire-WsGen" basedir="./WsGen" default="wsgen">
	&lt;path id="maven.compile.classpath">
		&lt;fileset file="${basedir}/lib/*.jar"/>
	&lt;/path>
	&lt;!-- Remove classes directory for clean build -->
	&lt;target name="clean" description="Prepare for clean build">
		&lt;delete dir="${basedir}/client"/>
		&lt;mkdir dir="${basedir}/client"/>
	&lt;/target>
	&lt;target name="wsgen" depends="clean">
		&lt;taskdef name="WsGenTask" classname="org.codehaus.xfire.gen.WsGenTask" classpathref="maven.compile.classpath"/>
		&lt;WsGenTask outputDirectory="${basedir}/client" wsdl="http://localhost:8080/mytest/services/HelloWordService?wsdl" package="com.tongtech.webservice.client" overwrite="true"/>
	&lt;/target>
&lt;/project>

</pre><br /><span style="color: green">需要修改WSDL的地址，另外，package为客户端生成后所在包的包名<br />执行ant打包即可生成，生成后可考到eclipse下运行调试</span>
          <br/>
          <span style="color:red;">
            <a href="http://chengyao.javaeye.com/blog/85381#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 01 Jun 2007 10:22:00 +0800</pubDate>
        <link>http://chengyao.javaeye.com/blog/85381</link>
        <guid>http://chengyao.javaeye.com/blog/85381</guid>
      </item>
      <item>
        <title>xfire插件自动生成客户端代码后,调用时报错(已解决)</title>
        <author>ioriyagami808</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chengyao.javaeye.com">ioriyagami808</a>&nbsp;
          链接：<a href="http://chengyao.javaeye.com/blog/85036" style="color:red;">http://chengyao.javaeye.com/blog/85036</a>&nbsp;
          发表时间: 2007年05月31日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          使用eclipes的xfire插件，生成了Webservice的客户端代码<br />在调用时，报错，具体代码如下<br />调用client的TestClient代码<br /><pre name="code" class="java">
	HelloWordServiceClient service=new HelloWordServiceClient();
		HelloWordServicePortType type=service.getHelloWordServiceHttpPort();
		System.out.println(type.sayHello("123"));
</pre><br /><br />HelloWordServiceClient 类中的create0方法中报错，代码如下，错误行已在代码中标出：<br /><pre name="code" class="java">
/**
 * 
 *以下为出错的方法
 */

private void create0() {
        TransportManager tm = (org.codehaus.xfire.XFireFactory.newInstance().getXFire().getTransportManager());
        HashMap props = new HashMap();
        props.put("annotations.allow.interface", true);
        AnnotationServiceFactory asf = new AnnotationServiceFactory(new Jsr181WebAnnotations(), tm, new AegisBindingProvider(new JaxbTypeRegistry()));
        asf.setBindingCreationEnabled(false);
        service0 = asf.create((com.tongtech.bjvsp.client.HelloWordServicePortType.class), props);//此处出错，提示HelloWordServicePortType不能为抽象类
        {
            AbstractSoapBinding soapBinding = asf.createSoap11Binding(service0, new QName("http://webservicedemo.rubyeye.net", "HelloWordServicePortTypeLocalBinding"), "urn:xfire:transport:local");
        }
        {
            AbstractSoapBinding soapBinding = asf.createSoap11Binding(service0, new QName("http://webservicedemo.rubyeye.net", "HelloWordServiceHttpBinding"), "http://schemas.xmlsoap.org/soap/http");
        }
    }
</pre><br /><br /><span style="color: brown">报错信息如下：</span><br /><span style="color: red">Exception in thread "main" org.codehaus.xfire.annotations.AnnotationException: Service class cannot be abstract: com.tongtech.bjvsp.client.HelloWordServicePortType<br />	at org.codehaus.xfire.annotations.AnnotationServiceFactory.assertValidImplementationClass(AnnotationServiceFactory.java:268)<br />	at org.codehaus.xfire.annotations.AnnotationServiceFactory.create(AnnotationServiceFactory.java:177)<br />	at org.codehaus.xfire.service.binding.ObjectServiceFactory.create(ObjectServiceFactory.java:284)<br />	at com.tongtech.bjvsp.client.HelloWordServiceClient.create0(HelloWordServiceClient.java:59)<br />	at com.tongtech.bjvsp.client.HelloWordServiceClient.&lt;init>(HelloWordServiceClient.java:26)<br />	at com.tongtech.bjvsp.testclient.TestClient.main(TestClient.java:14)</span><br /><br />由于客户端的代码是自动生成，所以不知哪里有问题，还是我在写服务器端代码时出了错？<br />因为是根据wsdl生成的客户端代码，因此我认为服务端应该不存在问题。<br />本人对于xfire不是十分熟悉，希望指点一二，谢谢
          <br/>
          <span style="color:red;">
            <a href="http://chengyao.javaeye.com/blog/85036#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 31 May 2007 12:45:44 +0800</pubDate>
        <link>http://chengyao.javaeye.com/blog/85036</link>
        <guid>http://chengyao.javaeye.com/blog/85036</guid>
      </item>
      <item>
        <title>java Filter的实际应用一例</title>
        <author>ioriyagami808</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chengyao.javaeye.com">ioriyagami808</a>&nbsp;
          链接：<a href="http://chengyao.javaeye.com/blog/82530" style="color:red;">http://chengyao.javaeye.com/blog/82530</a>&nbsp;
          发表时间: 2007年05月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <span style="color: green">以下代码为项目期间，使用fiter过滤器控制统一编码和防止非法url进入</span><br /><pre name="code" class="java">
package com.tongtech.bjvsp.sysmng.filter;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.tongtech.bjvsp.sysmng.constant.ConstantServlet;

public class EncodingFilter extends HttpServlet implements Filter {
	private FilterConfig filterConfig;

	// Handle the passed-in FilterConfig
	public void init(FilterConfig filterConfig) throws ServletException {
		this.filterConfig = filterConfig;
	}

	// Process the request/response pair
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain filterChain) {
		try {

			HttpServletRequest httpRequest = (HttpServletRequest) request;
			HttpServletResponse httpResponse = (HttpServletResponse) response;
			boolean isValid = true;
			String uriStr = httpRequest.getRequestURI();
			if (uriStr.indexOf(".jsp") == -1 && uriStr.indexOf(".do") == -1) {
				isValid = true;
			} else if (uriStr.indexOf("login.jsp") == -1 && uriStr.indexOf("login.do") == -1
					&& httpRequest.getSession().getAttribute("UserWraper") == null) {
				isValid = false;
			}

			if (isValid) {
				request.setCharacterEncoding("GBK");
				filterChain.doFilter(request, response);
			}

			else {
				request.setCharacterEncoding("GBK");
				PrintWriter out = httpResponse.getWriter();
				if( uriStr.indexOf("index.jsp") == -1 ) {
					out.write("&lt;script>window.parent.parent.location.href='../../login.jsp'&lt;/script>");
				} else {
					out.write("&lt;script>window.parent.parent.location.href='../login.jsp'&lt;/script>");
				}

			}

		} catch (ServletException sx) {
			filterConfig.getServletContext().log(sx.getMessage());
		} catch (IOException iox) {
			filterConfig.getServletContext().log(iox.getMessage());
		}
	}

	// Clean up resources
	public void destroy() {
	}
}

</pre><br />out.write内的内容为当未登录时或Session过期时通过地址栏访问应用URL时<br />对于页面跳转的控制<br /><br />web.xml配置<br /><pre name="code" class="java">
&lt;filter>
    &lt;filter-name>encodingfilter&lt;/filter-name>
    &lt;filter-class>com.tongtech.bjvsp.sysmng.filter.EncodingFilter&lt;/filter-class>
  &lt;/filter>
  &lt;filter-mapping>
    &lt;filter-name>encodingfilter&lt;/filter-name>
    &lt;url-pattern>/*&lt;/url-pattern>
  &lt;/filter-mapping>
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://chengyao.javaeye.com/blog/82530#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 24 May 2007 10:57:16 +0800</pubDate>
        <link>http://chengyao.javaeye.com/blog/82530</link>
        <guid>http://chengyao.javaeye.com/blog/82530</guid>
      </item>
      <item>
        <title>使用eclipse,xfire编写webservice以及aegis绑定问题</title>
        <author>ioriyagami808</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chengyao.javaeye.com">ioriyagami808</a>&nbsp;
          链接：<a href="http://chengyao.javaeye.com/blog/82518" style="color:red;">http://chengyao.javaeye.com/blog/82518</a>&nbsp;
          发表时间: 2007年05月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          myeclipse5.1支持xfire支持的非常棒。这里讲解一个简单的例子，<br />此文章为引用文章，仅做保留，供学习参考使用<br />1.首先建立一个web service工程：<br /><br /><img src="http://www.blogjava.net/images/blogjava_net/killme2008/new_wizard1.gif" /><br /><br /><img src="http://www.blogjava.net/images/blogjava_net/killme2008/new_wizard2.gif" /><br /><br /><img src="http://www.blogjava.net/images/blogjava_net/killme2008/new_wizard3.gif" /><br /><br /><img src="http://www.blogjava.net/images/blogjava_net/killme2008/4.BMP" /><br /><br />点击finish之后，myeclipse自动帮你生成services.xml以及web应用目录结构，其中的services.xml是你导出服务的配置文件，注意在WEB-INF/web.xml文件中配置了xfire自己的<br /><br />servlet.<br /><br /><pre name="code" class="java">&lt;servlet>
    &lt;servlet-name>XFireServlet&lt;/servlet-name>
    &lt;servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet&lt;/servlet-class>
    &lt;load-on-startup>0&lt;/load-on-startup>
  &lt;/servlet>
  &lt;servlet-mapping>
    &lt;servlet-name>XFireServlet&lt;/servlet-name>
    &lt;url-pattern>/services/*&lt;/url-pattern>
  &lt;/servlet-mapping></pre><br /><br />2.接下来，现在编写要导出的pojo类，首先是接口：<br /><pre name="code" class="java">
package net.rubyeye.webservicedemo;

//Generated by MyEclipse

public interface IHelloWorldService {

public String sayHello(String name);

}
</pre><br /><br />这个接口我们只提供一个方法:sayHello()，我们没有采用JSR181标注式的声明方式，还是采用xml配置文件。然后是实现类：<br /><pre name="code" class="java">
package net.rubyeye.webservicedemo;

//Generated by MyEclipse

public class HelloWorldServiceImpl implements IHelloWorldService {

public String sayHello(String name){

return "hello,"+name;

}

}
</pre><br /><br />最后，配置下services.xml文件:<br /><br /><pre name="code" class="java">
&lt;service>
        &lt;name>HelloWorldService&lt;/name>
        &lt;serviceClass>
            net.rubyeye.webservicedemo.IHelloWorldService
        &lt;/serviceClass>
        &lt;implementationClass>
            net.rubyeye.webservicedemo.HelloWorldServiceImpl
        &lt;/implementationClass>
        &lt;style>wrapped&lt;/style>
        &lt;use>literal&lt;/use>
        &lt;scope>application&lt;/scope>
    &lt;/service>
</pre><br /><br />我们的web服务名称叫做HelloWorldService，接口是IHelloWorldService，实现类是HelloWorldServiceImpl。<strong>注意，其实我们这三个步骤可以一步完成，只要直接使用<br /><br />myeclipse的new web service向导即可</strong><br /><br /><img src="http://www.blogjava.net/images/blogjava_net/killme2008/new_webservice_wiz1.gif" /><br /><br /><img src="http://www.blogjava.net/images/blogjava_net/killme2008/new_webservice_wiz1_codefirst2.gif" /><br /><br />3.然后将此工程部署到tomcat上，通过http://localhost:8081/HelloWorld/services/HelloWorldService?wsdl可以看到生成的wsdl文件。注意，在部署之后，services会被拷贝<br /><br />到WEB-INF\classes\META-INF\xfire目录下，xfire会自动搜索此目录并加载配置文件。我们可以编写一个client来测试web服务，你也可以点击myeclipse上的Launch the Web <br /><br />Services来测试web服务<br /><br /><img src="http://www.blogjava.net/images/blogjava_net/killme2008/webexplorer_launch.gif" /><br /><br />4.编写client代码：<br /><pre name="code" class="java">
package net.rubyeye.webservicedemo;

import java.net.MalformedURLException;

import java.util.ArrayList;

import java.util.List;

import org.codehaus.xfire.XFireFactory;

import org.codehaus.xfire.client.XFireProxyFactory;

import org.codehaus.xfire.service.Service;

import org.codehaus.xfire.service.binding.ObjectServiceFactory;

public class HelloWorldClient {

public static void main(String args[]) {

Service srvcModel = new ObjectServiceFactory()

.create(IHelloWorldService.class);

XFireProxyFactory factory = new XFireProxyFactory(XFireFactory

.newInstance().getXFire());

String helloWorldURL = "http://localhost:8081/HelloWorld/services/HelloWorldService";

try {

IHelloWorldService srvc = (IHelloWorldService) factory.create(

srvcModel, helloWorldURL);

System.out.print(srvc.sayHello("dennis"));

} catch (MalformedURLException e) {

e.printStackTrace();

}

}

}
</pre><br />执行，打印：hello,dennis<br /><br /><strong>注意，你也可以使用MyEclipse的new webservice client向导自动生成client，同时生成供客户端调用的stub类等。</strong><br /><br />如果返回类型是List或Map，并且里面存放的是自定义类的话，则需要增加一个对于服务接口的配置文件。该文件的命名规则是　接口文件名.aegis.xml。例如接口是<br /><br />HelloWorld.java的话，则此配置文件命名为HelloWorld.aegis.xml。<br />xml 代码<br /><pre name="code" class="java">
&lt;?xml version="1.0" encoding="UTF-8"?>   
&lt;mappings>   
  &lt;mapping >   
    &lt;method name="getUsers">   
      &lt;return-type componentType="com.excellence.webservice.test.User"/>   
    &lt;/method>   
  &lt;/mapping>   
&lt;/mappings>
</pre><br />getUsers方法返回类型是List，里面装的User对象。对于这种类型的方法，在配置文件中描述了它的返回值类型。<br />如果返回的类型是Map的话，做法和List一样。但定义的类型，是Map中的Value部分，并且这样的话，Map中Value所存放的对象就必须全部是同一种类啦<img src="/images/smiles/icon_smile.gif"/>
          <br/>
          <span style="color:red;">
            <a href="http://chengyao.javaeye.com/blog/82518#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 24 May 2007 10:12:58 +0800</pubDate>
        <link>http://chengyao.javaeye.com/blog/82518</link>
        <guid>http://chengyao.javaeye.com/blog/82518</guid>
      </item>
  </channel>
</rss>