低调星空

程序是字母与数字的魔术
posts - 17, comments - 1, trackbacks - 0, articles - 1
  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

2007年9月20日

posted @ 2007-09-20 13:48 citystar 阅读(235) | 评论 (0)编辑 收藏

posted @ 2007-09-20 13:44 citystar 阅读(199) | 评论 (0)编辑 收藏

posted @ 2007-09-20 09:58 citystar 阅读(209) | 评论 (0)编辑 收藏

2007年9月19日

posted @ 2007-09-19 10:35 citystar 阅读(344) | 评论 (0)编辑 收藏

2007年5月24日

     摘要:   ·                Country              &nbs...  阅读全文

posted @ 2007-05-24 13:21 citystar 阅读(705) | 评论 (0)编辑 收藏

2007年5月22日

     摘要:   NOTE: This page is obsolete! Please see the Codes for the representation of names of languages maintained by the Library of Congress or the W3C Internationalization Activity for further and up...  阅读全文

posted @ 2007-05-22 13:29 citystar 阅读(853) | 评论 (0)编辑 收藏

2007年5月17日

 

下面是一个XFire服务实例,这个例子已经在tomcat 5.5.28+jdk1.4.2中测试通过。

1、 创建服务接口ReadArticle,代码如下

package cn.starfield.service;

 

public interface ReadArticle {

       String getContent(String article) ;

}

本类实现了一个服务方法getContent(String article)

2、 创建服务类ReadArticleImpl,代码如下:

package cn.starfield.service.impl;

 

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStreamReader;

 

import org.apache.commons.logging.Log;

 

import cn.starfield.log.Logger;

import cn.starfield.service.ReadArticle;

 

public class ReadArticleImpl implements ReadArticle {

       private static Log log = Logger.getLog();

 

       public String getContent(String article) {

              StringBuffer datas = new StringBuffer(1024);

              File articleFile = new File("../webapps/xfiredemo/art/" + article

                            + ".art");

              try {

                     BufferedReader br = new BufferedReader(new InputStreamReader(

                                   new FileInputStream(articleFile)));

 

                     if (br != null) {

                            String line = br.readLine();

                            while (line != null) {

                                   datas.append(line);

                                   datas.append('\n');

                                   line = br.readLine();

                            }

                     }

              } catch (FileNotFoundException e) {

                     log.error("Article conn't found!", e);

              } catch (IOException e) {

                     log.error("Article conn't read!", e);

              }

              return datas.toString();

       }

}

本类实现了服务接口,完成服务的最终操作。

3、 创建services.xml,代码如下:

<beans xmlns="http://xfire.codehaus.org/config/1.0">

         <service>

                   <name>ReadArticle</name>

                   <namespace>http://starfield.cn/ReadArticle</namespace>

                   <serviceClass>cn.starfield.service.ReadArticle</serviceClass>

                   <implementationClass>

                            cn.starfield.service.impl.ReadArticleImpl

                   </implementationClass>

         </service>

</beans>

将此文件置于class/META-INF目录下

4、 修改web.xml。修改方法在前而的部署手册中已经说明。

 

 

下载工程代码后,在lib中导入必要的包就可发布服务了。(需要的包在前面的手册中有说明)

 

客户端调用代码如下:

package cn.starfield.service.client;

 

import java.lang.reflect.Proxy;

import java.net.MalformedURLException;

 

import org.apache.commons.logging.Log;

import org.codehaus.xfire.client.Client;

import org.codehaus.xfire.client.XFireProxy;

import org.codehaus.xfire.client.XFireProxyFactory;

import org.codehaus.xfire.service.Service;

import org.codehaus.xfire.service.binding.ObjectServiceFactory;

import org.codehaus.xfire.transport.http.CommonsHttpMessageSender;

 

import cn.starfield.log.Logger;

import cn.starfield.service.ReadArticle;

 

public class ReadArticleClient {

       Log log = Logger.getLog();

       public String getContent(String atrticle) {

              String content = null;

              String serviceURL = "http://127.0.0.1:8080/xfiredemo/services/ReadArticle";

 

              // 创建service对象

              Service serviceModel = new ObjectServiceFactory().create(

                            ReadArticle.class, null, "http://test.yicha.cn/adreport", null);

 

              XFireProxyFactory serviceFactory = new XFireProxyFactory();

              try {

                     // 获取服务对象

                     ReadArticle service = (ReadArticle) serviceFactory.create(

                                   serviceModel, serviceURL);

 

                     // 获取客户端代理

                     Client client = ((XFireProxy) Proxy.getInvocationHandler(service))

                                   .getClient();

                     // 启动response压缩

                     client.setProperty(CommonsHttpMessageSender.GZIP_RESPONSE_ENABLED,

                                   Boolean.TRUE);

                     // 启动request压缩

                     client.setProperty(CommonsHttpMessageSender.GZIP_RESPONSE_ENABLED,

                                   Boolean.TRUE);

                     // 同时启动responserequest压缩

                     client.setProperty(CommonsHttpMessageSender.GZIP_ENABLED,

                                   Boolean.TRUE);

                     // 忽略超时

                     client.setProperty(CommonsHttpMessageSender.HTTP_TIMEOUT, "0");

 

                     // 调用服务

                     content = service.getContent(atrticle);

              } catch (MalformedURLException e) {

                     log.error("Service conn't be use.", e);

              }

              return content;

 

       }

 

       /**

        * 测试用

        */

       public static void main(String[] args) {

              ReadArticleClient client = new ReadArticleClient();

              String content = client.getContent("article1");

              System.out.print(content);

       }

}

posted @ 2007-05-17 14:12 citystar 阅读(2374) | 评论 (0)编辑 收藏

2007年5月11日

XFire服务部署手册

一、准备工作:工程目录结构

工程的目录结构如下图所示:

1-1:工程目录结构

ldaxfire是工程的根目录。/WEB-INF/classes/META-INF/xfire目录用于存放service.xml文件。将XFire1.2.5下的包(用到的)copy/WEB-INF/lib目录下。

二、修改web.xml文件

web.xml文件中加入如下定义

       <servlet>

              <servlet-name>XFireServlet</servlet-name>

              <display-name>XFire Servlet</display-name>

              <servlet-class>

                     org.codehaus.xfire.transport.http.XFireConfigurableServlet

              </servlet-class>

       </servlet>

       <servlet-mapping>

              <servlet-name>XFireServlet</servlet-name>

              <url-pattern>/services/*</url-pattern>

       </servlet-mapping>

代码清单2-1:web.xml中增加的部分

这样在工程中发布的所有服务都可以在工程URLservices子目录下访问。

三、类结构调整

XFire对于要发布的服务没有多余的要求,它可以自动的将指定服务类的公共方法发布出去。但是POJOs的调用要求传入的参数类型必须是接口;同时由于XFire生成的桩使用了JDK1.4.2不支持的JSR181注释类型,所以在这里最好是遵从POJOs的要求,为每一个要发布的服务类生成一个接口,以便于低版本的客户端使用POJOs方式进行访问。

四、类型影射

XFire支持的数据类型包括基础类型、数组、集合、字符串、Datejava.util.Datejava.util.Calendarjava.sql.Timestampjava.sql.Datejava.sql.Time)、XML类型(DocumentElementXMLStreamReaderSource)及以上类型组成的复合类型。

基础类型、数组、StringDate类型不用进行类型影射,除此之外的数据类型如ListMap等集合对象或是其它的复合类型,必须要写对应的类型影射。

XFire的类型影射在ServiceClassName.aegis.xmlServiceClassName为服务类/接口的名字)文件中声明。

在这里尽量要求发布服务的参数和返回值不要超出基础类型、数组、String的泛围,因此类型影射在此不作详细说明。

五、服务的发布——service.xml文件配置

XFire工程中service.xml必须位于/WEB-INF/classes/META-INF/xfire/目录下。其基本格式如下

<beans xmlns="http://xfire.codehaus.org/config/1.0">

       <xfire>

              <inHandlers>

                     <handler handlerClass=""></handler>

              </inHandlers>

       </xfire>

       <service>

              <name />

              <namespace />

              <serviceClass />

              <implementationClass />

              <serviceFactory />

              <bindingProvider />

              <style>document|rpc|message|wrapped</style>

              <use>literal|encoded</use>

              <scope>request|session|application</scope>

              <invoker />

              <executor />

              <inHandlers>

                     <handler handlerClass="" />

              </inHandlers>

              <outHandlers>

                     <handler handlerClass="" />

              </outHandlers>

              <faultHandlers>

                     <handler handlerClass="" />

              </faultHandlers>

              <createDefaultBindings>true|false</createDefaultBindings>

              <bindings>

                     <soap11Binding name="qname" transport=""

                            allowUndefinedEndpoints="">

                            <endpoints>

                                   <endpoint name="qname" url="" />

                            </endpoints>

                     </soap11Binding>

                     <soap12Binding name="qname" transport=""

                            allowUndefinedEndpoints="">

                            <endpoints>

                                   <endpoint name="qname" url="" />

                            </endpoints>

                     </soap12Binding>

              </bindings>

       </service>

</beans>

代码清单5-1service.xml的完整配置

1、name:必须的。ServiceRegisty就是通过这个名字进行服务注册的,服务部署完成后也是用它来调用服务。

2、namespace:可选。用于指定服务的目标命空间。

3、serviceClass:必须的。要部署到服务中的类,可以是接口。

4、implementationClass:可选的。服务被调用时使用的实现类。如果serviceClass的值是一个接口,那么这个值就必须配置,且必须为serviceClass指定接口的实现类。

5、serviceFactory:可选的。ServiceFactory控制服务创建和配置。

6、bindingProvider:设置bindingProvider,提供绑定相关的信息。如端口等。

7、style:可选的。参数样式。默认值为wrapped。可取值为wrappedmessagedocument rpc

8、use:可选的。指定编码类型。取值可以是encodinglitaral,目前的XFire支持literal格式,即无编码。

9、scope:可选的。指定服务的生存周期。默认值为application,即在所以访问期间只创建一个服务,不用时可以会被持久化。可以是applicationsessionrequest

10、            invoker:可选的。设置调用转接器。如果当服务实现类不是一个无格式java beaninvoker可以指定其调用方式。

11、            excutor:可选值。可以为服务指定一个默认值以外的执行策略。

12、            handlers:可以使用inHandlersoutHandlersfaulterHandlers为服务指定输入、输出和出错时的调用的处理。每个handler自身是一个XML解析的处理句柄。

13、            createDefaultBinding:可选。默认为true,即创建默认的SOAP1.1 HTTP绑定。如果不想创建默认的绑定,可将其值设为false

14、            绑定配置:每一个绑定都要指定的一个transport ID。下面是对应的TransportID的对应表。使用endpoint选项可以覆盖掉默认的端口地址。

Transport

Transport ID

HTTP + SOAP 1.1

http://schemas.xmlsoap.org/soap/http

HTTP + SOAP 1.2

http://www.w3.org/2003/05/soap/bindings/HTTP/

XMPP

http://jabber.org/protocol/soap

JMS

urn:xfire:transport:jms

Local

urn:xfire:transport:local

下面给出一个service.xml的典型配置:

<beans xmlns="http://xfire.codehaus.org/config/1.0">

       <service>

              <name>ServiceName</name>

              <namespace>http://yourcompany.com/ServiceName</namespace>

              <serviceClass> com.yourcompany.yourpath..ServiceInterface</serviceClass>

              <implementationClass>

                     com.yourcompany.yourpath.ServiceImplClass

              </implementationClass>

              <inHandlers>

                     <handler

                            handlerClass="com.yourcompany.yourpath.HandlerClass" />

              </inHandlers>

       </service>

</beans>

代码清单5-2service.xml的典型配置

用自己实际的路径和类名取代上面的配置就是一个典型的XFire service配置。

六、客户端调用

客户端调用采用POJOs方式。在这种方式下要用到在服务端定义的服务接口。具体代码如下:

              String serviceURL = "http://192.168.0.225/ldaxfire/services/LDAService";

 

              // 创建service对象

              Service serviceModel = new ObjectServiceFactory().create(

                            ServiceInterface.class, null, "http://test.yicha.cn/adreport", null);

 

              XFireProxyFactory serviceFactory = new XFireProxyFactory();

 

              // 获取服务对象

              ServiceInterface service = (ServiceInterface) serviceFactory.create(

                            serviceModel, serviceURL);

 

              // 忽略超时

              Client client = Client.getInstance(service);

              client.setProperty(CommonsHttpMessageSender.HTTP_TIMEOUT, "0");

 

              // 调用服务

              data = service.serviceMethod();

代码清单6-1:客户端调用代码(POJOs方式)

注:其中的ServiceInterface在实际工程中要以实际的接口类型替代,serviceMethod以具体的方法名替代。

七、GZip的启用

XFire1.2以后支持SOAP消息的GZip压缩传输,在合适的地方启动GZip压缩可以减少网络传输的数据量,加快速度。

XFire中启动GZip压缩要用到一个开源的FilterPJL Compressing Filter。这个Filter的最新版本是1.6.4,自1.5.0开始该工程开始构建于JDK5.0,因此在JDK1.4环境下只能使用1.4.6(这个版本会与高版本同步更新)。

一、服务端启动GZip:在服务端启动GZip只需将PJL Compressing Filter下的jar包(用到的)导入到web/WEB-INF/lib目录下。并在web.xml文件中增加如下配置:

       <filter>

              <filter-name>CompressingFilter</filter-name>

              <filter-class>

                     com.planetj.servlet.filter.compression.CompressingFilter

              </filter-class>

              <init-param>

                     <param-name>debug</param-name>

                     <param-value>false</param-value>

              </init-param>

              <init-param>

                     <param-name>statsEnabled</param-name>

                     <param-value>true</param-value>

              </init-param>

       </filter>

       <filter-mapping>

              <filter-name>CompressingFilter</filter-name>

              <url-pattern>/*</url-pattern>

       </filter-mapping>

代码清单7-1服务端加入GZipweb.xml中增加的配置

注:根据web.xml文法定义,这个定义必须位于servlet定义之前。

二、客户端启用GZip:客户端启动GZip只要将客户端的GZip的属性设为true却可。代码如下:

              String serviceURL = "http://192.168.0.225/ldaxfire/services/LDAService";

 

              // 创建service对象

              Service serviceModel = new ObjectServiceFactory().create(

                            ServiceInterface.class, null, "http://test.yicha.cn/adreport", null);

 

              XFireProxyFactory serviceFactory = new XFireProxyFactory();

 

              // 获取服务对象

              ServiceInterface service = (ServiceInterface) serviceFactory.create(

                            serviceModel, serviceURL);

 

              // 获取客户端代理

              Client client = ((XFireProxy) Proxy.getInvocationHandler(service))

                            .getClient();

 

              // 启动response压缩

              client.setProperty(CommonsHttpMessageSender.

                            GZIP_RESPONSE_ENABLED, Boolean.TRUE);

 

              // 启动request压缩

              client.setProperty(CommonsHttpMessageSender.

                            GZIP_RESPONSE_ENABLED,Boolean.TRUE);

 

              // 同时启动responserequest压缩

              client.setProperty(CommonsHttpMessageSender.GZIP_ENABLED,

                            Boolean.TRUE);

 

              // 忽略超时

              client.setProperty(CommonsHttpMessageSender.HTTP_TIMEOUT, "0");

 

              // 调用服务

              data = service.serviceMethod();

代码清单7-2:客户端调用的修改

注:在同时启用时,不必再分别启用responserequestGZip压缩。

注意,当服务端没有启用GZip,客户端启用请求GZip压缩时,会产生SOAP解析错误,如果服务端启动了GZip压缩功能,客户端是否启用GZip都没有影响。

posted @ 2007-05-11 16:58 citystar 阅读(5465) | 评论 (1)编辑 收藏

2005年11月14日

ここは学校です。
ここは王さんの学校です。

そこは教室です。
そこは日本語の教室です。

あそこは体育館です。
あそこは図書館です。

郵便局はここです。
映画館はそこです。
駅はあそこです。

デパートはどこですか。
デパートはあそこです。
デパートは駅の前です。

店員:いらっしゃいませ。
田中:ワイシャツの売り場はここです。
店員:はい,そうです。
田中:そのワイシャツはいくらですか。
店員:そこは5000円いただきます。
田中:それをください。
店員:ありがとうございます。5000円いただきます。

posted @ 2005-11-14 10:20 citystar 阅读(181) | 评论 (0)编辑 收藏

2005年11月12日

看几个新的单语:
雑誌(ざっし)          杂志
本(ほん)            书
誰(だれ)            谁
万年筆(まんねんひつ)      自来水笔
辞書(じしょ)          辞典
中国語(ちゅうごくご)      汉语
新聞(しんぶん)         报纸
科学(かがく)          科学
歴史(れきし)          历史
人(ひと)            人
誰(だれ)            谁
友達(ともだち)         朋友
張(ちょう)           张(姓)
こんにちは            你好(白天用)
英語(えいご)          英语
すみません            对不起

これ(近称)           这个(在说话人身边)
それ(中称)           那个(在听话人身边)
あれ(远称)           那个(离说话人和听话人都比较远)
どれ(不定称)          哪个(表询问)
代词,表征某一事物

この(近称)           这个(在说话人身边)
その(中称)           那个(在听话人身边)
あの(远称)           那个(离说话人和听话人都比较远)
どの(不定称)          哪个(表询问)
后跟名词,指代方位

それは雑誌でしか。
译:那是杂志嘛?
これは本でし。
译:这是书。
これは雑誌ではありません。
译:这不是杂志。
これは誰の万年筆ですか。
译:这是谁的钢笔。
それは王さんの万年筆です。
译:这是小王的钢笔。
それは私の万年筆ではありません。
译:这不是我的钢笔。
あれは中国語の辞書ですか。
译:那是汉语字典嘛?
あれは中国語の辞書です。
译:那是汉语字典。
あれは日本語の辞書ではありません。
译:那不是日语字典。

この新聞は日本の新聞ですか。
译:这份报纸是日本的报纸嘛?
はい,それは日本の新聞です。
译:是的,这是日本的报纸。
その本は科学の本ですか。
译:那本书是科学书嘛。
いいえ,これは科学の本ではありません。歴史の本です。
译:不是,这不是科学书,这是历史书。
王さん,こんにちは。
译:小王,你好。
こんにちは。
译:你好。
あの人はだれですか。
译:那个为是谁?
あの人は私の友達です。あの人は張さんです。
译:那个人是我的朋友,那个人是小张。

王さん,こんにちは。
译:小王,你好。
こんにちは。
译:你好。
それは何ですか。
译:那是什么?
これは辞書です。
译:这是字典。
それは英語の辞書ですか。
译:那是英语字典嘛?
いいえ,英語の辞書ではありません。これはフランス語の辞書です。
译:不,不是,这不是英语字典,这是法语字典。
その辞書は王さんのですか。
译:那本字典是小王你的嘛?
いいえ,そうではありません。友達のです。
译:不,不是我的,是我的朋友的。
これは張さんの辞書です。
译:这是小张的字典。

すみません。
译:对不起。
いいえ,こちらこそすみません。
译:不,说对不起的应该是我。
私の本は。
译:我的书呢?
あなたの本は歴史の本ですか。
译:你的书是历史书嘛?
いいえ,辞書です。英語の辞書です。
译:不,是字典,英语字典。
この本ですか。
译:是这本书嘛?
ええ,そうです。
译:是,就是这本。


表示不了解的事物,
それは何ですか。
那是什么。
どれ相当于汉语中的哪个。

こんにちは。
日间用的寒暄语,意为你好,大致用在中午到晚上。
こちらこそ。
直为,我的,我们的,或者是,我们也,根据情况可译为,应该是我,或,也等等.
例:
初めまして。どぞう,よろしくお願いします。
初めまして。こちらこそよろしくお願いします。
初次见面,请多多关照。
初次见面,也请您多多关照。

posted @ 2005-11-12 20:44 citystar 阅读(218) | 评论 (0)编辑 收藏