mirror of
https://gitee.com/dromara/hutool.git
synced 2025-05-03 20:27:58 +08:00
add SoapClinet.reset
This commit is contained in:
parent
8d51e2343d
commit
c648c8c945
@ -14,6 +14,7 @@
|
||||
* 【core】 FileUtil.normalize在win下支持samba路径(issue#549@Github)
|
||||
* 【core】 修复Validator注释错误(pr#70@Gitee)
|
||||
* 【cron】 添加获取任务表的方法(issue#I12E5H@Gitee)
|
||||
* 【http】 SoapClient增加reset方法用于此对象的复用(issue#I12CCC@Gitee)
|
||||
|
||||
### Bug修复
|
||||
* 【core】 修复DateUtil.offset导致的时区错误问题(issue#I1294O@Gitee)
|
||||
|
@ -33,31 +33,66 @@ import cn.hutool.http.HttpResponse;
|
||||
/**
|
||||
* SOAP客户端
|
||||
*
|
||||
* <p>
|
||||
* 此对象用于构建一个SOAP消息,并通过HTTP接口发出消息内容。
|
||||
* SOAP消息本质上是一个XML文本,可以通过调用{@link #getMsgStr(boolean)} 方法获取消息体
|
||||
* <p>
|
||||
* 使用方法:
|
||||
*
|
||||
* <pre>
|
||||
* SoapClient client = SoapClient.create(url)
|
||||
* .setMethod(methodName, namespaceURI)
|
||||
* .setCharset(CharsetUtil.CHARSET_GBK)
|
||||
* .setParam(param1, "XXX");
|
||||
*
|
||||
* String response = client.send(true);
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author looly
|
||||
* @since 4.5.4
|
||||
*/
|
||||
public class SoapClient {
|
||||
|
||||
/** XML消息体的Content-Type */
|
||||
/**
|
||||
* XML消息体的Content-Type
|
||||
*/
|
||||
private static final String TEXT_XML_CONTENT_TYPE = "text/xml;charset=";
|
||||
|
||||
/** 请求的URL地址 */
|
||||
/**
|
||||
* 请求的URL地址
|
||||
*/
|
||||
private String url;
|
||||
/** 编码 */
|
||||
/**
|
||||
* 编码
|
||||
*/
|
||||
private Charset charset = CharsetUtil.CHARSET_UTF_8;
|
||||
/** SOAP消息 */
|
||||
private SOAPMessage message;
|
||||
/** 消息方法节点 */
|
||||
private SOAPBodyElement methodEle;
|
||||
/** 应用于方法上的命名空间URI */
|
||||
private String namespaceURI;
|
||||
/** 消息工厂,用于创建消息 */
|
||||
private MessageFactory factory;
|
||||
/** 默认连接超时 */
|
||||
/**
|
||||
* 默认连接超时
|
||||
*/
|
||||
private int connectionTimeout = HttpGlobalConfig.getTimeout();
|
||||
/** 默认读取超时 */
|
||||
/**
|
||||
* 默认读取超时
|
||||
*/
|
||||
private int readTimeout = HttpGlobalConfig.getTimeout();
|
||||
|
||||
/**
|
||||
* 消息工厂,用于创建消息
|
||||
*/
|
||||
private MessageFactory factory;
|
||||
/**
|
||||
* SOAP消息
|
||||
*/
|
||||
private SOAPMessage message;
|
||||
/**
|
||||
* 消息方法节点
|
||||
*/
|
||||
private SOAPBodyElement methodEle;
|
||||
/**
|
||||
* 应用于方法上的命名空间URI
|
||||
*/
|
||||
private String namespaceURI;
|
||||
|
||||
/**
|
||||
* 创建SOAP客户端,默认使用soap1.1版本协议
|
||||
*
|
||||
@ -71,7 +106,7 @@ public class SoapClient {
|
||||
/**
|
||||
* 创建SOAP客户端
|
||||
*
|
||||
* @param url WS的URL地址
|
||||
* @param url WS的URL地址
|
||||
* @param protocol 协议,见{@link SoapProtocol}
|
||||
* @return {@link SoapClient}
|
||||
*/
|
||||
@ -82,8 +117,8 @@ public class SoapClient {
|
||||
/**
|
||||
* 创建SOAP客户端
|
||||
*
|
||||
* @param url WS的URL地址
|
||||
* @param protocol 协议,见{@link SoapProtocol}
|
||||
* @param url WS的URL地址
|
||||
* @param protocol 协议,见{@link SoapProtocol}
|
||||
* @param namespaceURI 方法上的命名空间URI
|
||||
* @return {@link SoapClient}
|
||||
* @since 4.5.6
|
||||
@ -104,7 +139,7 @@ public class SoapClient {
|
||||
/**
|
||||
* 构造
|
||||
*
|
||||
* @param url WS的URL地址
|
||||
* @param url WS的URL地址
|
||||
* @param protocol 协议版本,见{@link SoapProtocol}
|
||||
*/
|
||||
public SoapClient(String url, SoapProtocol protocol) {
|
||||
@ -114,8 +149,8 @@ public class SoapClient {
|
||||
/**
|
||||
* 构造
|
||||
*
|
||||
* @param url WS的URL地址
|
||||
* @param protocol 协议版本,见{@link SoapProtocol}
|
||||
* @param url WS的URL地址
|
||||
* @param protocol 协议版本,见{@link SoapProtocol}
|
||||
* @param namespaceURI 方法上的命名空间URI
|
||||
* @since 4.5.6
|
||||
*/
|
||||
@ -144,6 +179,26 @@ public class SoapClient {
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 重置SOAP客户端,用于客户端复用
|
||||
*
|
||||
* <p>
|
||||
* 重置后需调用serMethod方法重新指定请求方法,并调用setParam方法重新定义参数
|
||||
*
|
||||
* @return this
|
||||
* @since 4.6.7
|
||||
*/
|
||||
public SoapClient reset() {
|
||||
try {
|
||||
this.message = factory.createMessage();
|
||||
} catch (SOAPException e) {
|
||||
throw new SoapRuntimeException(e);
|
||||
}
|
||||
this.methodEle = null;
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置编码
|
||||
*
|
||||
@ -186,11 +241,11 @@ public class SoapClient {
|
||||
/**
|
||||
* 设置头信息
|
||||
*
|
||||
* @param name 头信息标签名
|
||||
* @param actorURI 中间的消息接收者
|
||||
* @param roleUri Role的URI
|
||||
* @param name 头信息标签名
|
||||
* @param actorURI 中间的消息接收者
|
||||
* @param roleUri Role的URI
|
||||
* @param mustUnderstand 标题项对于要对其进行处理的接收者来说是强制的还是可选的
|
||||
* @param relay relay属性
|
||||
* @param relay relay属性
|
||||
* @return this
|
||||
*/
|
||||
public SoapClient setHeader(QName name, String actorURI, String roleUri, Boolean mustUnderstand, Boolean relay) {
|
||||
@ -222,8 +277,8 @@ public class SoapClient {
|
||||
/**
|
||||
* 设置请求方法
|
||||
*
|
||||
* @param name 方法名及其命名空间
|
||||
* @param params 参数
|
||||
* @param name 方法名及其命名空间
|
||||
* @param params 参数
|
||||
* @param useMethodPrefix 是否使用方法的命名空间前缀
|
||||
* @return this
|
||||
*/
|
||||
@ -234,8 +289,8 @@ public class SoapClient {
|
||||
/**
|
||||
* 设置请求方法
|
||||
*
|
||||
* @param name 方法名及其命名空间
|
||||
* @param params 参数
|
||||
* @param name 方法名及其命名空间
|
||||
* @param params 参数
|
||||
* @param useMethodPrefix 是否使用方法的命名空间前缀
|
||||
* @return this
|
||||
*/
|
||||
@ -267,7 +322,7 @@ public class SoapClient {
|
||||
* 方法名自动识别前缀,前缀和方法名使用“:”分隔<br>
|
||||
* 当识别到前缀后,自动添加xmlns属性,关联到传入的namespaceURI
|
||||
*
|
||||
* @param methodName 方法名(可有前缀也可无)
|
||||
* @param methodName 方法名(可有前缀也可无)
|
||||
* @param namespaceURI 命名空间URI
|
||||
* @return this
|
||||
*/
|
||||
@ -301,7 +356,7 @@ public class SoapClient {
|
||||
/**
|
||||
* 设置方法参数,使用方法的前缀
|
||||
*
|
||||
* @param name 参数名
|
||||
* @param name 参数名
|
||||
* @param value 参数值,可以是字符串或Map或{@link SOAPElement}
|
||||
* @return this
|
||||
*/
|
||||
@ -312,8 +367,8 @@ public class SoapClient {
|
||||
/**
|
||||
* 设置方法参数
|
||||
*
|
||||
* @param name 参数名
|
||||
* @param value 参数值,可以是字符串或Map或{@link SOAPElement}
|
||||
* @param name 参数名
|
||||
* @param value 参数值,可以是字符串或Map或{@link SOAPElement}
|
||||
* @param useMethodPrefix 是否使用方法的命名空间前缀
|
||||
* @return this
|
||||
*/
|
||||
@ -336,7 +391,7 @@ public class SoapClient {
|
||||
/**
|
||||
* 批量设置参数
|
||||
*
|
||||
* @param params 参数列表
|
||||
* @param params 参数列表
|
||||
* @param useMethodPrefix 是否使用方法的命名空间前缀
|
||||
* @return this
|
||||
* @since 4.5.6
|
||||
@ -448,7 +503,7 @@ public class SoapClient {
|
||||
final HttpResponse res = sendForResponse();
|
||||
final MimeHeaders headers = new MimeHeaders();
|
||||
for (Entry<String, List<String>> entry : res.headers().entrySet()) {
|
||||
if(StrUtil.isNotEmpty(entry.getKey())) {
|
||||
if (StrUtil.isNotEmpty(entry.getKey())) {
|
||||
headers.setHeader(entry.getKey(), CollUtil.get(entry.getValue(), 0));
|
||||
}
|
||||
}
|
||||
@ -482,6 +537,7 @@ public class SoapClient {
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------------------------------------------- Private method start
|
||||
|
||||
/**
|
||||
* 发送请求,获取异步响应
|
||||
*
|
||||
@ -489,12 +545,12 @@ public class SoapClient {
|
||||
*/
|
||||
private HttpResponse sendForResponse() {
|
||||
return HttpRequest.post(this.url)//
|
||||
.setFollowRedirects(true)//
|
||||
.setConnectionTimeout(this.connectionTimeout)
|
||||
.setReadTimeout(this.readTimeout)
|
||||
.contentType(getXmlContentType())//
|
||||
.body(getMsgStr(false))//
|
||||
.executeAsync();
|
||||
.setFollowRedirects(true)//
|
||||
.setConnectionTimeout(this.connectionTimeout)
|
||||
.setReadTimeout(this.readTimeout)
|
||||
.contentType(getXmlContentType())//
|
||||
.body(getMsgStr(false))//
|
||||
.executeAsync();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -509,9 +565,9 @@ public class SoapClient {
|
||||
/**
|
||||
* 设置方法参数
|
||||
*
|
||||
* @param ele 方法节点
|
||||
* @param name 参数名
|
||||
* @param value 参数值
|
||||
* @param ele 方法节点
|
||||
* @param name 参数名
|
||||
* @param value 参数值
|
||||
* @param prefix 命名空间前缀
|
||||
* @return {@link SOAPElement}子节点
|
||||
*/
|
||||
@ -528,7 +584,7 @@ public class SoapClient {
|
||||
throw new SoapRuntimeException(e);
|
||||
}
|
||||
|
||||
if(null != value) {
|
||||
if (null != value) {
|
||||
if (value instanceof SOAPElement) {
|
||||
// 单个子节点
|
||||
try {
|
||||
|
Loading…
Reference in New Issue
Block a user