一、拼接报文的方式:
(1)利用StringBuffer来拼接字符串,代码如下:
StringBuffer soapData = new StringBuffer();
soapData.append("<?xml version=\"1.0\"?>");
soapData.append("<ImageSearch provider=\"ATM-WF\" orgid=\"99\" branchid=\"99\" businessorgid=\"99\" busine ssbranchid=\"ATM99\" userid=\"");
soapData.append(userId);
soapData.append("\" type=\"FR_BaseView\">");
soapData.append("<InitSoapAddress>");
soapData.append("http://10.112.**.*:8004/ImageViewPortal/services/ImageViewService?wsdl");
soapData.append("</InitSoapAddress>");
soapData.append("<InitSoapService>ImageViewService</InitSoapService>");
soapData.append("<InitSoapAction>execute</InitSoapAction>");
soapData.append("<Input>");
soapData.append("<QueryTerm1>");
soapData.append(signImageIndex);
soapData.append("</QueryTerm1>");
soapData.append("</Input>");
soapData.append("</ImageSearch>");
return soapData.toString();
(2)利用dom4j拼接xml文件,代码如下:
public static void main(String args[]) {
Document document = DocumentHelper.createDocument(); //声明document
Element root = DocumentHelper.createElement("ImageSearch"); //根节点
document.setRootElement(root); //将根节点放入document
root.addAttribute("provider","ATM-WF"); //添加属性
root.addAttribute("branchId ", "99");
Element InitSoapAddress = root.addElement("InitSoapAddress"); //子节点
InitSoapAddress.addText(" http://10.112.*.***:8***/ImageViewPortal/services/ImageViewService?wsdl"); //添加内容
Element InitSoapService = root.addElement("InitSoapService");
InitSoapService.setText("ImageViewService");
Element InitSoapAction = root.addElement("InitSoapAction");
InitSoapAction.addText("execute");
XMLWriter str = new XMLWriter();
try {
str.write(document); //控制台输出
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
二、利用AXIS的call方法发送报文,代码如下:
public static String serUrl = "http://10.112.**.*:80**/ImageViewPortal/services/ImageViewService?wsdl";//访问接口地址
public static String nameSpace = "http://10.112.**.*:80**/ImageViewPortal/services/ImageViewService";//wsdl文件中的namespace
String response = null;
String parameter =getBASE64(xmlSoap); //对报文进行BASE64转码,可不必
try {
Service service = new Service();
Call call = (Call)service.createCall();
QName qn = new QName(nameSpace,"execute");
call.setTargetEndpointAddress(new java.net.URL(serUrl));
call.setOperationName(qn);
call.setEncodingStyle("UTF-8");
call.addParameter("xml", XMLType.XSD_STRING,ParameterMode.IN);//xml为execute方法的参数名,后面定义类型,和方式
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//返回报文类型
response = (String)call.invoke(new Object[]{parameter});
} catch(ServiceException e) {
e.printStackTrace();
logger.error(e);
} catch (RemoteException e) {
e.printStackTrace();
logger.error(e);
} catch (MalformedURLException e) {
e.printStackTrace();
}
三、返回报文取某个节点里的值,这里取url(返回报文格式为:
<TIV version="1.0.0"><ImageUrls><ImageUrlsrc="http://10.112.**.*:8***/ImageStoreServer//servlet/FileDownLoad?name=286456&businessCode=ImageATM"><Range>1-1</Range></ImageUrl></ImageUrls></TIV>):
Document document = null;
try {
document = DocumentHelper.parseText(releaseCode);
} catch (DocumentException e) {
logger.error("ParseTextException");
}
Element root = document.getRootElement();//获取根节点
Element child = root.element("ImageUrls");//获取子节点
Element grandson = child.element("ImageUrl");//获取子目标节点
String url= grandson.attributeValue("src");//获取目标属性
System.out.println(url);
return url;