【发布时间】:2016-01-18 06:08:04
【问题描述】:
将肥皂正文附加到 Web 服务时遇到问题。我正在使用 apache cxf api。 调用 web 服务时,我看到肥皂体生成为空白。 我正在使用以下代码:
GetPDFDocumentRequest request = new ObjectFactory().createGetPDFDocumentRequest();
request.setCrid(reference);
request.setResourceId(confirmationId);
request.setVersion(Integer.parseInt(version));
request.setDocType(pdfType);
String encryptedString = svc().getPDFDocument(request).getDocument();
虽然当我从 GetPDFDocumentRequest 打印值时。所有值:crid、resourceid、version 和 doctype 都有值,但我没有看到它附加在 soap 正文中,如下所示:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><env:Header xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"></env:Header><soap:Body><ns2:GetPDFDocumentRequest xmlns="http://test.fm.com/Static/interface" xmlns:ns2="https://test.fm.grp.net/style/webservices/schemas/messages" xmlns:ns3="http://test.fm.com/EventML" xmlns:ns4="http://test.fm.com/StyleML" xmlns:ns5="http://test.fm.com/odc" xmlns:ns6="https://test.fm.rbsgrp.net/test/lifecycle/schemas/types" xmlns:ns7="https://test.fm.rbsgrp.net/style/persistence/schemas/types" xmlns:ns8="http://test.fm.com/Reporting/interface" xmlns:ns9="http://test.fm.com/ConfigML"/></soap:Body>
我在 maven 中使用下面的 api:
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>2.7.4</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>2.7.4</version>
</dependency>
我什至添加了 cxf-rt-frontend-jaxrs,但使用后也没有成功。
拦截器代码:
import java.io.OutputStream;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.io.CacheAndWriteOutputStream;
import org.apache.cxf.io.CachedOutputStream;
import org.apache.cxf.io.CachedOutputStreamCallback;
import org.apache.cxf.message.Message;
import org.apache.cxf.phase.Phase;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
public class LogInterceptor extends LoggingOutInterceptor {
private Logger logger = Logger.getLogger(LogInterceptor.class);
public LogInterceptor() {
super(Phase.PRE_STREAM);
}
@Override
public void handleMessage(Message message) throws Fault {
OutputStream out = message.getContent(OutputStream.class);
final CacheAndWriteOutputStream newOut = new CacheAndWriteOutputStream(out);
message.setContent(OutputStream.class, newOut);
newOut.registerCallback(new LoggingCallback());
}
public class LoggingCallback implements CachedOutputStreamCallback {
public void onFlush(CachedOutputStream cos) {
}
public void onClose(CachedOutputStream cos) {
try {
StringBuilder builder = new StringBuilder();
cos.writeCacheTo(builder, limit);
String soapXml = builder.toString();
logger.log(Level.INFO, "SOAP XML SENT TO STYLE" + soapXml);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
【问题讨论】:
标签: java web-services soap wsdl cxf