集成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;
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();
}
}