首先:需要用到的jar包axis-ant.jar,axis.jar,wsdl4j-1.5.1.jar
1、然后server-config.wsdd 文件的配置:
xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
2、web.xml配置---
org.apache.axis.transport.http.AxisHTTPSessionListener
AxisServlet
org.apache.axis.transport.http.AxisServlet
AdminServlet
org.apache.axis.transport.http.AdminServlet
100
AxisServlet
/showAllAxisServlet
AxisServlet
/services/*
wsdl
text/xml
3、过滤器----由于web.xml配置文件中,struts2的映射是/*,自定义一个过滤器,放行webservice请求
public class WsFilter extends StrutsPrepareAndExecuteFilter {
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
System.out.println("----------------------");
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
if (request.getRequestURI().contains("?wsdl")
|| request.getRequestURI().contains("showAllAxisServlet")
|| request.getRequestURI().contains("/services")) {
chain.doFilter(request, response);
} else {
try {
prepare.setEncodingAndLocale(request, response);
prepare.createActionContext(request, response);
prepare.assignDispatcherToThread();
if (excludedPatterns != null
&& prepare.isUrlExcluded(request, excludedPatterns)) {
chain.doFilter(request, response);
} else {
request = prepare.wrapRequest(request);
ActionMapping mapping = prepare.findActionMapping(request,
response, true);
if (mapping == null) {
boolean handled = execute.executeStaticResourceRequest(
request, response);
if (!handled) {
chain.doFilter(request, response);
}
} else {
execute.executeAction(request, response, mapping);
}
}
} finally {
prepare.cleanupRequest(request);
}
}
}
}
4、前台 点击 按钮 通过Action再请求 service:
jsonArray的包:import net.sf.json.JSONArray;
public void aa(){
①参数 list List list, List list1
②将 list转为 json数组格式
JSONArray listJson = JSONArray.fromObject(list);
JSONArray list1Json = JSONArray.fromObject(list1);
③将list封装到map
Map map=new HashMap();
//是退回 还是 第一次插入
map.put("listJson ", listJson );
map.put("list1Json ", list1Json );
④调 接口的方法
query(map);
}
/**
* 调用 外部提供的 接口,
* @return
*/
private void query(Map params) throws RuntimeException {
Service service = new Service();
XMLRead reader = new XMLRead();
try {
// 封装参数xml字符串
String inXml = packageParamsXml(params);
Call call = (Call) service.createCall();
//此处为 wenservice服务器端的 url
String targetEendPoint = "http://192.168.88.128:81/country/services/SaveDataServiceImpl?wsdl";
//设置地址
call.setTargetEndpointAddress(new java.net.URL(targetEendPoint));
//设置要执行的方法
call.setOperationName(new QName(targetEendPoint,"saveCheckData"));//WSDL里面描述的接口名称
//接口的参数
call.addParameter(new QName(targetEendPoint, "inXml"), XMLType.SOAP_STRING, ParameterMode.IN);
//设置返回类型
call.setReturnType(new QName(targetEendPoint, "response"), String.class);
//设置返回的类型
//call.setReturnType(org.apache.axis.Constants.XSD_STRING);
//执行,调用webservice
String result = (String) call.invoke(new Object[]{inXml});
TreeMap m = reader.parseXml(result);
if ("0".equals(m.get("ifSuccess"))) {
throw new RuntimeException();
}
System.out.println("返回的结果是:"+result);
/* QName qn = new QName("urn:ParData","params1");
call.registerTypeMapping(ParData.class, qn,
new org.apache.axis.encoding.ser.BeanSerializerFactory(ParData.class,qn),
new org.apache.axis.encoding.ser.BeanDeserializerFactory(ParData.class,qn));
// 设置返回类型
call.setReturnType(qn, ParData.class);
call.setOperationName(qn);
call.addParameter("params1", qn, javax.xml.rpc.ParameterMode.IN);
ParData params1 = new ParData();
ParData ret = (ParData) call.invoke(new Object[] { params1 });
System.out.println("return value is " + ret);*/
} catch (Exception e) {
e.printStackTrace();
}
}
//封装 参数,将 参数 转换成 xml 格式,webservice的调用 所能传递的参数格式 xml
private String packageParamsXml(Map params) {
StringBuffer sbBuf = new StringBuffer();
sbBuf.append("<?xml version='1.0' encoding='utf-8'?>");
sbBuf.append("");
sbBuf.append("");
sbBuf.append("");
return sbBuf.toString();
}