webservice 的调用 客户端 参数 List<Object> 的实例,转换成xml格式

首先:需要用到的jar包axis-ant.jar,axis.jar,wsdl4j-1.5.1.jar

1、然后server-config.wsdd  文件的配置:

<?xml version="1.0" encoding="UTF-8"?>
<deployment 
	xmlns="http://xml.apache.org/axis/wsdd/"
	xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
	<globalConfiguration>
		<parameter name="adminPassword" value="admin" />
		<parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl" />
		<parameter name="sendXsiTypes" value="true" />
		<parameter name="sendMultiRefs" value="true" />
		<parameter name="sendXMLDeclaration" value="true" />
		<parameter name="axis.sendMinimizedElements" value="true" />
		<requestFlow>
			<handler type="java:org.apache.axis.handlers.JWSHandler">
				<parameter name="scope" value="session" />
			</handler>
			<handler type="java:org.apache.axis.handlers.JWSHandler">
				<parameter name="scope" value="request" />
				<parameter name="extension" value=".jwr" />
			</handler>
		</requestFlow>
	</globalConfiguration>
	<handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder" />
	<handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper" />
	<handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler" />
	<handler name="soapmonitor" type="java:org.apache.axis.handlers.SOAPMonitorHandler">
		<parameter name="wsdlURL" value="/axis/SOAPMonitorService-impl.wsdl"/>
		<parameter name="namespace" value="http://tempuri.org/wsdl/2001/12/SOAPMonitorService-impl.wsdl"/>
		<parameter name="serviceName" value="SOAPMonitorService"/>
		<parameter name="portName" value="Demo"/>
	</handler>
	
	<handler name="logging" type="java:com.aa.aa.util.LogHandler" />
	
	<!--此处编写 自己的Action      即 需要 调用 远程Service相关的 功能-->
	<service name="QueryDataAction" provider="java:RPC">
		<requestFlow>
			<handler type="soapmonitor" />
			<handler type="logging" />
		</requestFlow>
		<responseFlow>
			<handler type="soapmonitor"/>
		</responseFlow>
		<parameter name="allowedMethods" value="*" />
		<parameter name="className" value="com.aa.aa.querydata.action.QueryDataAction" />
	</service>


	<transport name="http">
		<requestFlow>
			<handler type="URLMapper" />
			<handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler" />
		</requestFlow>
	</transport>
	<transport name="local">
		<responseFlow>
			<handler type="LocalResponder" />
		</responseFlow>
	</transport>
</deployment>

2、web.xml配置---

<listener>
		<listener-class>org.apache.axis.transport.http.AxisHTTPSessionListener</listener-class>
	</listener>

  <servlet>
		<servlet-name>AxisServlet</servlet-name>
		<servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
	</servlet>
	
	<servlet>
		<servlet-name>AdminServlet</servlet-name>
		<servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class>
		<load-on-startup>100</load-on-startup>
	</servlet>

  <servlet-mapping>
		<servlet-name>AxisServlet</servlet-name>
		<url-pattern>/showAllAxisServlet</url-pattern>
	</servlet-mapping>
	
	<servlet-mapping>
		<servlet-name>AxisServlet</servlet-name>
		<url-pattern>/services/*</url-pattern>
	</servlet-mapping>

	<mime-mapping>
		<extension>wsdl</extension>
		<mime-type>text/xml</mime-type>
	</mime-mapping>

 

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<Object> list, List<Object> 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'?><tobacco action='"+params.get("action")+"'>");
		sbBuf.append("<dataset listJson ='"+params.get("listJson ")+"'/>");
		sbBuf.append("<dataset list1Json ='"+params.get("list1Json ")+"'/>");
		sbBuf.append("</tobacco>");
		return sbBuf.toString();
	}





 

 

 

转载于:https://my.oschina.net/u/3053442/blog/836779

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值