1. 程式人生 > >java程式碼webservice客戶端的兩種呼叫方式

java程式碼webservice客戶端的兩種呼叫方式



import javax.xml.namespace.QName;
import javax.xml.rpc.Call;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.Service;
import javax.xml.rpc.ServiceException;
import javax.xml.rpc.ServiceFactory;
import javax.xml.rpc.encoding.XMLType;

//Axis客戶端:

//第一種寫法

 public String callinvoke(String bsId,String msg) throws Exception
 {    
  webServiceURL = queryaa06aa01(paraName, aab034);
  String targetNamespace = "

namespace";
  QName servicename = new QName(webServiceURL,targetNamespace);
  //定義一個服務物件
  javax.xml.rpc.Service service = ServiceFactory.newInstance().createService(servicename);
  //根據服務物件建立一個請求物件
  javax.xml.rpc.Call call = service.createCall();
  //請求地址
  call.setTargetEndpointAddress(webServiceURL);
  //請求方法以及所使用的名稱空間
  QName operationname = new QName(targetNamespace, "siService");
  //裝入連線物件中
  call.setOperationName(operationname);
  //定義引數列表
  call.addParameter("bsId",XMLType.XSD_STRING,ParameterMode.IN );
  call.addParameter("msg",XMLType.XSD_STRING,ParameterMode.IN );  
  //定義名稱空間中的型別
  QName returnname = new QName(targetNamespace, "string");
  //定義返回值型別
  call.setReturnType(returnname, String.class);
  //請求呼叫
  String result = call.invoke(new Object[]{bsId,msg}).toString();
  //解碼出參
//  BASE64Decoder decoder = new BASE64Decoder();
//  byte[] deMsg = decoder.decodeBuffer(result);
//  result = new String(deMsg);
  result = this.DecodeBase64(result);
  return result;
 }

//第二種寫法

public String callWebservice(String requestXml,String webService_url){
  String xml ="";
  System.out.println("入參報文:"+ requestXml +"\n");
  System.out.println("介面地址:"+ webService_url +"\n");
  try{
   Service service = new Service();
   Call call = (Call) service.createCall();
   call.setTargetEndpointAddress(new  java.net.URL(webService_url));
   call.setUseSOAPAction(true);
   call.setSOAPActionURI("

https://www.baidu.com/");
   call.setOperationName(new QName("namespace", "exchange_ycyb"));
   call.setReturnType(XMLType.SOAP_STRING);
   call.addParameter("getinfo",XMLType.SOAP_STRING,ParameterMode.IN );//
   String XMLString = null;
   XMLString =  requestXml ;
   String result = (String) call.invoke(new Object[]{XMLString});
   System.out.println("出參報文:"+result+"\n");
   xml = result;
   if(xml==null){
    xml = "";
   }
  }catch(Exception e){
   System.out.println("==============================異常資訊=================:"+e.getMessage()+"\n");
  }
  return xml;
 }

//soap方式

package structdata;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.rmi.RemoteException;

import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.ServiceException;
import javax.xml.rpc.ServiceFactory;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.Name;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPConnection;
import javax.xml.soap.SOAPConnectionFactory;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.StringRequestEntity;
import org.apache.commons.httpclient.params.HttpClientParams;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.jfree.util.Log;

public class testcall {
 private static String targetNamespace = "";
 private String namespace = "";
 private static String webServiceURL = "";
 private static final long serialVersionUID = 0L;
 /**
  * @param args
  */
 public static void main(String[] args) {
  
  String temp = "";
  try {
    SOAPConnectionFactory soapConnFactory = SOAPConnectionFactory.newInstance();//SOAPConnectionFactory.newInstance();
    SOAPConnection connection = soapConnFactory.createConnection();          
    MessageFactory messageFactory = MessageFactory.newInstance();//MessageFactory.newInstance();
    SOAPMessage message = messageFactory.createMessage();       
    SOAPPart soapPart = message.getSOAPPart();
    SOAPEnvelope envelope = soapPart.getEnvelope();
    SOAPBody body = envelope.getBody();                    
    SOAPElement bodyElement = body.addChildElement(envelope.createName("login" , "web", targetNamespace));
    SOAPElement firstElemnt = bodyElement.addChildElement(envelope.createName("cmpyCode" , "", ""));
    Name firstName = envelope.createName("type");
    firstElemnt.addAttribute(firstName, "String");
    firstElemnt.addTextNode("7");
    SOAPElement secondElemnt = bodyElement.addChildElement(envelope.createName("loginName" , "", ""));
    Name secondName = envelope.createName("type");
    secondElemnt.addAttribute(secondName, "String");
    secondElemnt.addTextNode("fangkezhanghu");     
    SOAPElement secondElemnt1 = bodyElement.addChildElement(envelope.createName("password" , "", ""));
    Name secondName1 = envelope.createName("type");
    secondElemnt1.addAttribute(secondName1, "String");
    secondElemnt1.addTextNode("123456");  
    message.saveChanges();
    String destination = webServiceURL;
    SOAPMessage reply = connection.call(message, destination);
    if(reply!=null)
    {
        Source source = reply.getSOAPPart().getContent();
        Transformer transformer = TransformerFactory.newInstance().newTransformer();
        ByteArrayOutputStream myOutStr = new ByteArrayOutputStream();
        StreamResult res = new StreamResult();
        res.setOutputStream(myOutStr);
        transformer.transform(source,res);
        temp = myOutStr.toString("UTF-8"); 
    }      
    connection.close();
  }
  catch(Exception e)
  {
    System.out.println(e.getMessage());
  }  
  if(temp == null)
  {
   temp = "";
  }
  

 }