基于Apache CXF webservice 测试

集成spring

//构造服务端webservice接口

package com.huaji.shtel.webservice;

import javax.jws.WebParam;
import javax.jws.WebService;

@WebService
public interface FirstService {

  public String getFirstName(@WebParam(name = "firstName")String name);

  public String getSencondName(@WebParam(name = "name")String name,@WebParam(name="age")String age,
    @WebParam(name="money")String money);
}

package com.huaji.shtel.webservice.impl;

import java.util.Map;

import javax.jws.WebService;
import javax.servlet.http.HttpServletRequest;

import org.apache.cxf.message.Message;
import org.apache.cxf.phase.PhaseInterceptorChain;
import org.apache.cxf.transport.http.AbstractHTTPDestination;

扫描二维码关注公众号,回复: 921905 查看本文章

import com.alibaba.druid.util.StringUtils;
import com.alibaba.fastjson.JSONObject;
import com.huaji.shtel.webservice.FirstService;

@WebService(name="first")
public class FirstServiceImpl implements FirstService{

@Override
public String getFirstName(String name) {

  if(StringUtils.isEmpty(name)){
    return "缺少必要参数";
  }
  return "first"+name;
}

@Override
public String getSencondName(String name,String age,String money) {
  if(StringUtils.isEmpty(name)||StringUtils.isEmpty(age)||StringUtils.isEmpty(money)){
    return "参数错误";
  }
  String clientAddress = getClientAddress();
  if(clientAddress.equals("192.168.5.175")){
    return "没有权限访问";
  }
  System.out.println(clientAddress);
  return createXml(name);
}

/**
* 获取调用端ip地址 以后对调用接口设置ip权限
* @Title:getClientAddress
* @author:dmy
* @Description:TODO
* @return
*/
public String getClientAddress(){
  Message message = PhaseInterceptorChain.getCurrentMessage();
  HttpServletRequest httprequest = (HttpServletRequest)message.get(AbstractHTTPDestination.HTTP_REQUEST);
  String clientAddress = httprequest.getRemoteAddr();
  return clientAddress;
}
/**
* 根据传递的字符串生成对应的xml。
* @param 传递过来的参数name
* @return 返回xml的字符串
*/
public String createXml(String name) {
  StringBuffer sb = new StringBuffer();
  sb.append("<?xml version='1.0' encoding='UTF-8'?>");
  sb.append("<Result>");
  sb.append("<Name>小小鸟</Name>");
  sb.append("<director>" + name + "</director>");
  sb.append("<introduce>好的系统,不错!!!</introduce>");
  sb.append("<price>25</price>");
  sb.append("</Result>");
  return sb.toString();
  }
}

//客户端调用采用httpClient

package com.huaji.shtel.controller;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import javax.xml.namespace.QName;
import javax.xml.ws.Service;

public class HelloWorldClient {

private HelloWorldClient() {

}
public static void main(String[] args) {
  try {
    //第一步:创建服务地址,不是WSDL地址webservice地址
    URL url = new URL("http://localhost:8080/web/webservice/firstWebservice");
    //第二步:打开一个通向服务地址的连接
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    //第三步:设置参数
    //3.1发送方式设置:POST必须大写
    connection.setRequestMethod("POST");
    //3.2设置数据格式:content-type
    connection.setRequestProperty("content-type", "text/xml;charset=utf-8");
    //3.3设置输入输出,因为默认新创建的connection没有读写权限,
    connection.setDoInput(true);
    connection.setDoOutput(true);
    //第四步:组织SOAP数据,发送请求
    String soapXML = getXML();
    OutputStream os = connection.getOutputStream();
    os.write(soapXML.getBytes());
    //第五步:接收服务端响应,打印
    int responseCode = connection.getResponseCode();
    System.out.println(connection.getResponseCode());
    if(200 == responseCode){//表示服务端响应成功
      InputStream is = connection.getInputStream();
      InputStreamReader isr = new InputStreamReader(is);
      BufferedReader br = new BufferedReader(isr);
      StringBuilder sb = new StringBuilder();
      String temp = null;
      while(null != (temp = br.readLine())){
        sb.append(temp);
      }
      System.out.println(sb.toString());
      is.close();
      isr.close();
      br.close();
      os.close();
    }
  } catch (Exception e) {
    // TODO: handle exception
    e.printStackTrace();
  }
}

public static String getXML(){
  StringBuilder sb = new StringBuilder();
  sb.append("<?xml version=\"1.0\"?>");
  sb.append("<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" ");
  sb.append(" xmlns:web=\"http://webservice.shtel.huaji.com/\" ");//要特别注意结尾必须带有"/",这一串由服务端提供
  sb.append(" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"");
  sb.append(" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"); // 要特别注意结尾必须带有"/"
  sb.append("<soap:Header>");//添加头部认证
  /*sb.append("<spId>wdw</spId>");*/
  sb.append("<spPassword>wdwsb</spPassword>");
  sb.append("</soap:Header>");
  sb.append("<soap:Body>");
  sb.append("<web:getSencondName>"); //“getSencondName"调用方法名
  sb.append("<name>老A</name>"); //传参 name为接口上定义的名称
  sb.append("<age>25</age>");
  sb.append("<money>50000</money>");
  sb.append("</web:getSencondName>");
  sb.append("</soap:Body>");
  sb.append("</soap:Envelope>");
  return sb.toString();
  }
}

猜你喜欢

转载自www.cnblogs.com/dmyglf/p/9056367.html