关于两个工程合并 Struts2工程冲突问题(serializer.jar)
看了网上很多的实例,介绍一个简单点的~
1.新建WEB工程 testservice
目录如下:
cn--test--service--impl
2.要导入的包
activation-1.0.2.jar
commons-codec-1.3.jar
commons-httpclient-3.0.jar
commons-logging-1.0.4.jar
jaxen-1.1-beta-8.jar
jdom-1.0.jar
log4j-1.2.x.jar
mail-1.3.3_01.jar
spring-1.2.x.jar
stax-api-1.0.jar
wsdl4j-1.5.2.jar
wstx-asl-2.9.jar
xbean-2.1.0.jar
xbean-spring-2.2.jar
xfire-all-1.0.jar
XmlSchema-1.0.jar
3.数据发布端
(1)编写发布接口
package cn.test.service;
public interface ADService {
String[][] getDatas();
}
(2)编写实现类
package cn.test.service.impl;
import cn.test.service.ADService;
public class ADServiceImpl implements ADService{
public String[][] getDatas() {
String ads[][] = new String[3][3];
for(int i=0; i< 3; i++){
for(int j=0; j< 3; j++){
ads[i][j] = String.valueOf(i * j);
}
}
return ads;
}
}
4.增加xfire的配置文件services.xml
在src目录中加入/src/META-INF/xfire/services.xml
< beans xmlns=" http://xfire.codehaus.org/config/1.0" >
< service>
< name> AD< /name> < !-- 这个名字比较重要,调用时用的就是它 -->
< namespace> http://localhost/ADService< /namespace>
< serviceClass> cn.test.service.ADService< /serviceClass>
< implementationClass>
cn.test.service.impl.ADServiceImpl
< /implementationClass>
< !-- 这个东西是一个修饰器 貌似调用了SPRING的整合有关 加了会报一个错误
< inHandlers>
< handler
handler/>
< /inHandlers>
-->
< /service>
< /beans>
5.配置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>
6.测试xfire是否部署成功
http://localhost/testservice/services/AD?wsdl
7.编写客户端
package cn.test.service;
import java.net.MalformedURLException;
import org.codehaus.xfire.XFire;
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 CallService {
public String[][] getData(){
Service serviceModel = new ObjectServiceFactory().create(ADService.class); //注意,此处用的接口是发布端的接口ADService.class
XFire xfire = XFireFactory.newInstance().getXFire();
XFireProxyFactory factory = new XFireProxyFactory(xfire);
String serviceUrl = " http://localhost/testservice/services/AD" ;
ADService client = null;
try {
client = (ADService) factory.create(serviceModel, serviceUrl);
} catch (MalformedURLException e) {
System.out.println(" WsClient.callWebService(): EXCEPTION: " + e.toString());
}
String[][] datas = null ;
try {
datas = client.getDatas();
} catch (Exception e){
System.out.println(" WsClient.callWebService(): EXCEPTION: " + e.toString());
}
//将所有的数据逐个打印出来
int len = datas.length;
for(int i=0; i< len; i++){
int len2 = datas[i].length;
for(int j=0; j< len2; j++){
System.out.print(" \t" +datas[i][j]);
}
System.out.println();
}
return datas;
}
}
8.写一个JSP调用客户端
< %@ page language=" java" import=" java.util.*,cn.yicha.service.*" pageEncoding=" utf-8" %>
< !DOCTYPE HTML PUBLIC " -//W3C//DTD HTML 4.01 Transitional//EN" >
< html>
< head>
< title> My JSP ''index.jsp'' starting page< /title>
< /head>
< body>
webservice test!
< %
CallService cs = new CallService();
cs.getData();
< /body>
< /html>
----------------------------------------
通过页面访问,自动将URL传递给相应方法~
这是SOAP的一种实现方法~
初步领教了~
另外MYECLIPSE自带的Spring1.2.6和SPRING2.0的包有冲突,需注意!
还有一个常出的问题是java.lang.NoClassDefFoundError: org/apache/xml/serializer/TreeWalker错误
这次通过在Apache官方找到了出错误的原因:
原本这个类是包含在xalan.jar中的,但是xalan-j2.7.0版的发布包中,将serializer包中的类单独打包成 serializer.jar,不再包含在xalan.jar中,所以才会即使添加了xalan.jar也无法找到该类,添加后即可解决问题!
在出具体问题时,如果是出现java.lang.NoClassDefFoundError这样的错误,注意查看对应的jar包是否导入!
从: http://blog.myspace.cn/e/402635251.htm 转载