工作中需要用java调用peoplesoft提供的webservice接口,但peoplesoft的实施方没有提供java调用的案例代码,soapUI可以调用,但java代码一直写不出来,自行学习并调通了用java http post模拟的方法,感谢天涯的zhouyun0243和谷歌!
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; //需要commons-io的jar包 import org.apache.commons.io.IOUtils; public class testwebservice { public static void main(String[] args) { try { soapSpecialConnection(); } catch (Exception e) {e.printStackTrace();}} public static void soapSpecialConnection() throws Exception{ String s = new String(); StringBuilder soapHeader = new StringBuilder(); //soapUI自动生成的request xml路径,写入传入参数 File file = new File("d:\\1.xml"); BufferedReader reader = null; try {reader = new BufferedReader(new FileReader(file)); String tempString = null; // 一次读入一行,直到读入null为文件结束 while ((tempString = reader.readLine()) != null) { soapHeader.append(tempString); } reader.close(); } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e1) {} } } System.out.println("soapHeader="+soapHeader); //设置soap请求报文的相关属性 //url从soapUI的request1的RAW标签的POST获取,url中不要有空格 String url="http://10.60.217.86:9527/dji-hrService/services/HrService.HrServiceHttpSoap11Endpoint/HTTP/1.1"; URL u = new URL(url); HttpURLConnection conn = (HttpURLConnection) u.openConnection(); conn.setDoInput(true); conn.setDoOutput(true); conn.setUseCaches(false); conn.setDefaultUseCaches(false); //Host,Content-Type,SOAPAction从soapUI的request1的RAW标签的Host,Content-Typ,SOAPActione获取 conn.setRequestProperty("Host", "10.60.217.86:9527"); conn.setRequestProperty("Content-Type", "ext/xml;charset=UTF-8"); conn.setRequestProperty("Content-Length", String.valueOf(soapHeader.length())); conn.setRequestProperty("SOAPAction", "urn:getWorkAttendanceByUidAndDate"); conn.setRequestMethod("POST"); //定义输出流 OutputStream output = conn.getOutputStream(); if (null != soapHeader) { byte[] b = soapHeader.toString().getBytes("utf-8"); //发送soap请求报文 output.write(b, 0, b.length);} output.flush(); output.close(); //定义输入流,获取soap响应报文 InputStream input = conn.getInputStream(); //需设置编码格式,否则会乱码 s=IOUtils.toString(input, "UTF-8"); input.close(); System.out.println("输出的xml="+s);}}
soapUI的request1的RAW标签示意
时间: 2024-10-08 12:07:06