`
zwm
  • 浏览: 273392 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

WebServices 学习笔记

阅读更多

WebServices
首先,建立一个 web service project ,名称为WS-Server
1.建立一个接口类 IHelloWorld.java
/**
 *
 */
package zz.it.interfs;


/**
 * @author zwm
 *
 */
public interface IHelloWorld {
 public String getHelloWorld(String yourName);
}
2.搞定接口实现类HelloWorldImpl.java
/**
 *
 */
package zz.it.impl;

import org.apache.log4j.Logger;

import zz.it.interfs.IHelloWorld;

/**
 * @author zwm
 *
 */
public class HelloWorldImpl implements IHelloWorld {

 private static final Logger log=Logger.getLogger(HelloWorldImpl.class);
 /* (non-Javadoc)
  * @see zz.it.interfs.IHelloWorld#getHelloWorld(java.lang.String)
  */
 public String getHelloWorld(String yourName) {
  // TODO Auto-generated method stub
  log.info("Server Hello you:>>>Welcome:"+yourName);
  return yourName;
 }

}
3.配置WebServices/下的services.xml文件
代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">
 <service>
  <name>helloWorld</name> 
  <serviceClass>zz.it.interfs.IHelloWorld</serviceClass>
  <implementationClass>
   zz.it.impl.HelloWorldImpl
  </implementationClass>
  <style>wrapped</style>
  <use>literal</use>
  <scope>application</scope>
 </service>
</beans>
4.因为用到了log4j,那就在弄个配置文件过来吧。
## LOGGERS ##
#define a logger named PP
#Test Used
log4j.rootLogger=info,console,file

## APPENDERS ##
# define an appender named console, which is set to be a ConsoleAppender
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.logger.PPLogger=WARN
log4j.logger.rootLogger.childLogger=,file
log4j.logger.rootLogger.jspLogger=,file

# define an appender named file, which is set to be a RollingFileAppender
# log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=pp.log
log4j.appender.file.DatePattern='.'yyyy-MM-dd

 


## LAYOUTS ##
# assign a SimpleLayout to console appender
log4j.appender.console.layout=org.apache.log4j.PatternLayout

# assign a PatternLayout to file appender
log4j.appender.file.layout=org.apache.log4j.PatternLayout
# log4j.appender.file.layout.ConversionPattern=%t %p - %m%n
# log4j.appender.file.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
log4j.appender.file.layout.ConversionPattern=%-d{yyyy-MM-dd  HH:mm:ss,SSS}  [%c]-[%-5p] Method: %l%n%m%n 


5.加载相应的jar包。注意几个
xfire-core-1.2.2.jar
log4j-1.2.11.jar
反正俺也不知道哪个需要与不需要,多加几个就是了。俺一次性加了28个jar,感觉是不是硬件性能太好了。

6.差不多了吧,开始着手客户端的编写。
***************************************************
*****************WS-Client**************************
***************************************************
同样建立一个Web service project WS-Client
1.建立与服务端相同的接口IHelloWorld.java
/**
 *
 */
package zz.it.interfs;


/**
 * @author zwm
 *
 */
public interface IHelloWorld {
 public String getHelloWorld(String yourName);
}
2.建立一个过渡文件WSConfig ,目的是为了从XML文件中通过相应webserivce访问的URL地址,感觉是不是有些多余。
package zz.it.test;

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

 


import org.w3c.dom.Document;

public class WSConfig {
  String  protocol="";//协议
  String ip="";//IP
  String port="";//端口号
  String serviceName="";//服务名称
 
 public WSConfig() {
  File xmlfile = new File("E:/workspace1/WS-Client/WebRoot/WEB-INF/wsconfig.xml");   
  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  DocumentBuilder builder = null;
  Document Doc = null;
  try {
  builder = factory.newDocumentBuilder();     
  Doc = builder.parse(xmlfile);
  } catch (Exception e) {
  e.printStackTrace();
  }
  this.protocol = Doc.getElementsByTagName("protocol").item(0).getFirstChild()
  .getNodeValue();
  this.ip = Doc.getElementsByTagName("ip").item(0).getFirstChild()
  .getNodeValue();
  this.port = Doc.getElementsByTagName("port").item(0).getFirstChild()
  .getNodeValue();
  this.serviceName = Doc.getElementsByTagName("serviceName").item(0).getFirstChild()
  .getNodeValue();  
  
  }
  public static void main(String args[]){
   new WSConfig(); 
  }
  public String getIp() {
   return ip;
  }
  public void setIp(String ip) {
   this.ip = ip;
  }
  public String getPort() {
   return port;
  }
  public void setPort(String port) {
   this.port = port;
  }
  public String getProtocol() {
   return protocol;
  }
  public void setProtocol(String protocol) {
   this.protocol = protocol;
  }
  public String getServiceName() {
   return serviceName;
  }
  public void setServiceName(String serviceName) {
   this.serviceName = serviceName;
  }
  

}

上面所使用到的配置文件内容为wsconfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<config>
<!--protocol-->
<protocol>http://</protocol>
<!--IP-->
<ip>localhost</ip>
<!--port-->
<port>8099</port>
<!--serviceName-->
<serviceName>/WS-Server/services/helloWorld</serviceName>
</config>


3.建立差不多像测试的例子(俺对Junit不是特别浓缩)MainTest.java
/**
 *
 */
package zz.it.test;

import org.codehaus.xfire.XFireFactory;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;

import zz.it.interfs.IHelloWorld;

/**
 * @author zwm
 *
 */
public class MainTest {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Service servModel = new ObjectServiceFactory()
    .create(IHelloWorld.class);
  //
  XFireProxyFactory factory = new XFireProxyFactory(XFireFactory
    .newInstance().getXFire());
  WSConfig ws = new WSConfig();
  String wsUrl = ws.getProtocol() + ws.getIp() + ":" + ws.getPort()
    + ws.getServiceName();
  try {
   IHelloWorld srvc = (IHelloWorld) factory.create(servModel, wsUrl);
   System.out.println(srvc.getHelloWorld("@author:zwm"));
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

 }

}

最好,我们将WS-Server装载到服务器,启动服务,运行MainTest,将会看到@author:zwm的信息。目前是在eclipse IDE下运行,控制台应该是@author:zwm
WS-Server采用是Tomcat,如果日志级别允许,则可以看到Server Hello you:>>>Welcome:@author:zwm

如此而已,不知上述是否正确,多多关照。 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics