使用axis调用webservice接口

以前使用webservice服务都很简单,就是根据提供的wsdl接口地址,通过eclipse或者idea自动生成webservice client包,然后直接调用就可以了。这次业务提供的wsdl是需要验证soapheader的,而且通过IDE工具无法生成可以直接调用的类包,无奈只能通过其他办法来实现,通过百度,可以使用axis包来实现,具体实现过程如下:

1、需要的jar包依赖

        
            org.apache.axis
            axis
            1.4
        

        
            javax.xml.rpc
            javax.xml.rpc-api
            1.1.1
        

        
            org.apache.geronimo.bundles
            commons-discovery
            0.4_1
        

        
            wsdl4j
            wsdl4j
            1.6.3
        

2、WSDL接口文档



  
   
     
       
         
           
              
             
           
         
        
       
         
           
             
           
         
        
        
       
         
            
           
          
         
       
     
    
   
     
    
   
     
    
   
     
    
   
     
        
       
     
    
   
      
     
        
       
          
         
        
       
         
       
     
    
   
      
     
        
       
          
         
        
       
         
       
     
    
   
     
       
      
     
       
     
   

3、接口调用代码

public static void sendReportTest(byte[] reportData, String date){
	try {
		// 服务端的url,需要根据情况更改。
		String endpointURL = URL;
		Service service = new Service();
		Call call = (Call) service.createCall();
		call.setTimeout(new Integer(60000));
		call.setTargetEndpointAddress(new URL(endpointURL));
		call.setSOAPActionURI("http://tempuri.org/SendXMLFile");
		call.setOperationName(new QName("http://tempuri.org/","SendXMLFile"));// 设置操作的名称。
		// 由于需要认证,故需要设置调用的用户名和密码。
		SOAPHeaderElement soapHeaderElement = new SOAPHeaderElement("http://tempuri.org/", "UserSoapHeader");
		soapHeaderElement.setNamespaceURI("http://tempuri.org/");
		try {
			soapHeaderElement.addChildElement("UserId").setValue(USER_ID);
			soapHeaderElement.addChildElement("PassWord").setValue(PASSWORD);
		} catch (SOAPException e) {
			e.printStackTrace();
		}
		call.addHeader(soapHeaderElement);
		call.setReturnType(XMLType.XSD_STRING);// 返回的数据类型
		call.addParameter(new QName("http://tempuri.org/","xmlProjectData"), XMLType.XSD_BASE64, ParameterMode.IN);// 参数的类型
		call.addParameter(new QName("http://tempuri.org/","reportDate"), XMLType.XSD_STRING, ParameterMode.IN);// 参数的类型
		String result = (String) call.invoke(new Object[]{reportData,date});// 执行调用
		// 结果信息解析
		Document document = DocumentHelper.parseText(result);
		Element rootElement = document.getRootElement();
		Iterator iter = rootElement.elementIterator("State");
		while(iter.hasNext()){
			Element recordEle = (Element) iter.next();
			String code = recordEle.getTextTrim();// State值
			if("0".equals(code)){ //成功
				Logger.getRootLogger().error("调用接口成功");
			}else{ // 失败保存log
				Logger.getRootLogger().error(result);
			}
		}
	} catch (Exception e) {
		Logger.getRootLogger().error("调用接口失败",e);
	}
}

转载于:https://www.cnblogs.com/archermeng/p/8587537.html

你可能感兴趣的:(开发工具)