【发布时间】:2014-06-28 15:10:52
【问题描述】:
我正在尝试在 Mule 中使用 cxf 生成的客户端代理调用 https Web 服务。几乎 99% 的时间,我得到了
Caused by: org.apache.commons.httpclient.ProtocolException: Unbuffered entity enclosing request can not be repeated.
at org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java:487)
at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:2114)
at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1096)*
该应用具有 http 入站端点。 Mule Java 转换器尝试使用 cxf 生成的客户端代理使用 https 调用 Web 服务。我遇到了上述异常。
我提供了 mule 流程的屏幕截图 [http://i.stack.imgur.com/7X9Wg.jpg]。非常感激!!
Mule 配置 xml
<cxf:jaxws-service serviceClass="test.service.https.TestService" doc:name="SOAP" configuration-ref="CXF_Configuration" enableMuleSoapHeaders="false"/>
<custom-transformer class="test.service.https.CallLicenseService" doc:name="Calls HTTPS WS using CXF generated client proxies" encoding="UTF-8" mimeType="text/plain"/>
<logger message="Success" level="INFO" doc:name="Logger"/>
<set-payload value="#['HELLO SUCCESS']" doc:name="Set Payload"/> </flow>
变压器 URL wsdlURL = null; 字符串 serviceUrl = "TARGET_HTTPS_WSDL"; //这将是目标 https URL
try {
wsdlURL = new URL(serviceUrl);
} catch (MalformedURLException e) {
Logger.getLogger(getClass()).info("", e);
}
AuditLogServiceService ss = new AuditLogServiceService(wsdlURL);
AuditLoggingService port = ss.getAuditLoggingServicePort();
((BindingProvider) port).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
serviceUrl.substring(0, serviceUrl.length() - 5));
AuditLogServiceRequest request = new AuditLogServiceRequest();
request.setClientId("4");
request.setUserId("101");
request.setEventSubType("1");
request.setEventType("1");
AuditLogMessage msg = new AuditLogMessage();
msg.setMessage("Hello Test");
request.getLogMessages().add(msg);
AuditLogServiceResponse response = port.logEvent(request);
System.out.println(response.getMessage());
返回响应.getMessage();
【问题讨论】:
-
您能否分享您的流程以检查导致问题的原因
-
我已将详细信息添加到我发布的问题中。如果您需要更多详细信息,请告诉我。