增加Webservice Soap Test
This commit is contained in:
parent
be55671f8e
commit
788747ee49
|
|
@ -23,6 +23,19 @@
|
|||
<artifactId>ruoyi-common</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!--https://mvnrepository.com/artifact/org.apache.cxf/cxf-spring-boot-starter-jaxws-->
|
||||
<dependency>
|
||||
<groupId>org.apache.cxf</groupId>
|
||||
<artifactId>cxf-spring-boot-starter-jaxws</artifactId>
|
||||
<version>3.2.6</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.json</groupId>
|
||||
<artifactId>json</artifactId>
|
||||
<version>20160810</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
|
|
@ -0,0 +1,171 @@
|
|||
package com.ruoyi.test.conrtroller;
|
||||
|
||||
import org.apache.cxf.endpoint.Client;
|
||||
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
|
||||
import org.json.XML;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.w3c.dom.Document;
|
||||
|
||||
import javax.xml.namespace.QName;
|
||||
import javax.xml.soap.MessageFactory;
|
||||
import javax.xml.soap.SOAPBody;
|
||||
import javax.xml.soap.SOAPBodyElement;
|
||||
import javax.xml.soap.SOAPMessage;
|
||||
import javax.xml.transform.Transformer;
|
||||
import javax.xml.transform.TransformerConfigurationException;
|
||||
import javax.xml.transform.TransformerException;
|
||||
import javax.xml.transform.TransformerFactory;
|
||||
import javax.xml.transform.dom.DOMSource;
|
||||
import javax.xml.transform.stream.StreamResult;
|
||||
import javax.xml.ws.BindingProvider;
|
||||
import javax.xml.ws.Dispatch;
|
||||
import javax.xml.ws.Service;
|
||||
import javax.xml.ws.WebServiceException;
|
||||
import javax.xml.ws.soap.SOAPBinding;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/anon/soap")
|
||||
public class SoapTestController {
|
||||
|
||||
|
||||
/**
|
||||
* https://www.jianshu.com/p/cdbcdd724813
|
||||
* 方法一:用cxf框架
|
||||
* @param url
|
||||
* @param method
|
||||
* @param args
|
||||
* @return
|
||||
*/
|
||||
@CrossOrigin
|
||||
@RequestMapping("/hello")
|
||||
@ResponseBody
|
||||
public Map<String, Object> hello(String url, String method, String[] args) {
|
||||
if (args.length < 1) {
|
||||
args = new String[]{""};
|
||||
}
|
||||
|
||||
// 创建动态客户端
|
||||
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
|
||||
Client client = dcf.createClient(url);
|
||||
// 需要密码的情况需要加上用户名和密码
|
||||
// client.getOutInterceptors().add(new ClientLoginInterceptor(USER_NAME,PASS_WORD));
|
||||
// 命名空间,方法名
|
||||
QName name = new QName("http://WebXml.com.cn/", method);
|
||||
HashMap<String, Object> map = new HashMap<>();
|
||||
try {
|
||||
// invoke("方法名",参数1,参数2,参数3....);
|
||||
Object[] objects = client.invoke(name, args);
|
||||
map.put("result", objects);
|
||||
return map;
|
||||
} catch (java.lang.Exception e) {
|
||||
e.printStackTrace();
|
||||
map.put("result", "接口调用异常");
|
||||
return map;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 方法二:自己用jax-ws的方式实现
|
||||
* @param url 请求地址
|
||||
* @param targetNamespace 名称空间
|
||||
* @param pName 端口名
|
||||
* @param method 方法名
|
||||
* @param argsName 参数名
|
||||
* @param args 参数
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
@RequestMapping("/getSoap")
|
||||
@ResponseBody
|
||||
public Map getSoap(String url, String targetNamespace, String pName, String method, String[] argsName, String[] args) throws Exception {
|
||||
QName serviceName = new QName(targetNamespace, method);
|
||||
|
||||
//WSDL中定义的端口的QName
|
||||
QName portName = new QName(targetNamespace, pName);
|
||||
|
||||
//创建动态Service实例
|
||||
Service service = Service.create(serviceName);
|
||||
service.addPort(portName, SOAPBinding.SOAP11HTTP_BINDING, url);
|
||||
|
||||
//创建一个dispatch实例
|
||||
Dispatch<SOAPMessage> dispatch = service.createDispatch(portName, SOAPMessage.class, Service.Mode.MESSAGE);
|
||||
|
||||
// Use Dispatch as BindingProvider
|
||||
BindingProvider bp = (BindingProvider) dispatch;
|
||||
|
||||
// 配置RequestContext以发送SOAPAction HTTP标头
|
||||
Map<String, Object> rc = dispatch.getRequestContext();
|
||||
rc.put(BindingProvider.SOAPACTION_USE_PROPERTY, Boolean.TRUE);
|
||||
rc.put(BindingProvider.SOAPACTION_URI_PROPERTY, targetNamespace + method);
|
||||
|
||||
// 获取预配置的SAAJ MessageFactory
|
||||
MessageFactory factory = ((SOAPBinding) bp.getBinding()).getMessageFactory();
|
||||
|
||||
// 创建SOAPMessage请求
|
||||
SOAPMessage request = null;
|
||||
request = factory.createMessage();
|
||||
// 请求体
|
||||
SOAPBody body = request.getSOAPBody();
|
||||
|
||||
// Compose the soap:Body payload
|
||||
QName payloadName = new QName(targetNamespace, method);
|
||||
|
||||
SOAPBodyElement payload = body.addBodyElement(payloadName);
|
||||
if (args.length > 0) {
|
||||
for (int i = 0; i < argsName.length; i++) {
|
||||
payload.addChildElement(argsName[i]).setValue(args[i]);
|
||||
}
|
||||
}
|
||||
// payload.addChildElement("startCity").setValue("北京");
|
||||
// payload.addChildElement("lastCity").setValue("上海");
|
||||
// payload.addChildElement("theDate").setValue("2019-06-07");
|
||||
// payload.addChildElement("userID").setValue("");
|
||||
|
||||
// SOAPElement message = payload.addChildElement(INPUT_NMAE);
|
||||
// message.addTextNode("88888");
|
||||
|
||||
SOAPMessage reply = null;
|
||||
|
||||
try {
|
||||
//调用端点操作并读取响应
|
||||
//request.writeTo(System.out);
|
||||
reply = dispatch.invoke(request);
|
||||
//reply.writeTo(System.out);
|
||||
} catch (WebServiceException wse) {
|
||||
wse.printStackTrace();
|
||||
}
|
||||
|
||||
// 处理响应结果
|
||||
Document doc = reply.getSOAPPart().getEnvelope().getBody().extractContentAsDocument();
|
||||
HashMap<String, Object> map = new HashMap<>();
|
||||
map.put("result", XML.toJSONObject(format(doc)).toString());
|
||||
//System.out.println(XML.toJSONObject(format(doc)).toString());
|
||||
return map;
|
||||
|
||||
}
|
||||
|
||||
// Document对象转字符串
|
||||
public static String format(Document doc) throws Exception {
|
||||
// XML转字符串
|
||||
String xmlStr = "";
|
||||
try {
|
||||
TransformerFactory tf = TransformerFactory.newInstance();
|
||||
Transformer t = tf.newTransformer();
|
||||
t.setOutputProperty("encoding", "UTF-8");
|
||||
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
||||
t.transform(new DOMSource(doc), new StreamResult(bos));
|
||||
xmlStr = bos.toString();
|
||||
} catch (TransformerConfigurationException e) {
|
||||
e.printStackTrace();
|
||||
} catch (TransformerException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return xmlStr;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -26,10 +26,10 @@
|
|||
<div class="col-sm-7">
|
||||
<div class="signin-info">
|
||||
<div class="logopanel m-b">
|
||||
<h1><img alt="[ 若依 ]" src="../static/ruoyi.png" th:src="@{/ruoyi.png}"></h1>
|
||||
<h1><img alt="[ BPS ]" src="../static/ruoyi.png" th:src="@{/ruoyi.png}"></h1>
|
||||
</div>
|
||||
<div class="m-b"></div>
|
||||
<h4>欢迎使用 <strong>若依 后台管理系统</strong></h4>
|
||||
<h4>欢迎使用 <strong>BPS后台管理系统</strong></h4>
|
||||
<ul class="m-b">
|
||||
<li><i class="fa fa-arrow-circle-o-right m-r-xs"></i> SpringBoot</li>
|
||||
<li><i class="fa fa-arrow-circle-o-right m-r-xs"></i> Mybatis</li>
|
||||
|
|
@ -43,7 +43,7 @@
|
|||
<div class="col-sm-5">
|
||||
<form id="signupForm" autocomplete="off">
|
||||
<h4 class="no-margins">登录:</h4>
|
||||
<p class="m-t-md">你若不离不弃,我必生死相依</p>
|
||||
<p class="m-t-md">请输入用户名、密码进行登录!</p>
|
||||
<input type="text" name="username" class="form-control uname" placeholder="用户名" value="admin" />
|
||||
<input type="password" name="password" class="form-control pword" placeholder="密码" value="admin123" />
|
||||
<div class="row m-t" th:if="${captchaEnabled==true}">
|
||||
|
|
|
|||
Loading…
Reference in New Issue