Tomcat JAX-WS:OutOfMemory和大型附件+;链式装卸工

Tomcat JAX-WS:OutOfMemory和大型附件+;链式装卸工,tomcat,soap,jax-ws,out-of-memory,mtom,Tomcat,Soap,Jax Ws,Out Of Memory,Mtom,我的问题类似于: 及 我正在使用tomcat,Metro运行时配置,当我想在我的HandlerChain中添加一个头时,它会给我一个OutOfMemory异常 public boolean handleMessage(SOAPMessageContext smc) { if (Boolean.TRUE.equals(smc.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY))) { SOAPMessage sm = smc.getM

我的问题类似于: 及

我正在使用tomcat,Metro运行时配置,当我想在我的
HandlerChain
中添加一个头时,它会给我一个
OutOfMemory
异常

public boolean handleMessage(SOAPMessageContext smc) {
    if (Boolean.TRUE.equals(smc.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY))) {
        SOAPMessage sm = smc.getMessage(); // <- OutOfMemory
        ...
公共布尔handleMessage(SOAPMessageContext smc){
if(Boolean.TRUE.equals(smc.get(MessageContext.MESSAGE\u OUTBOUND\u属性))){

SOAPMessage sm=smc.getMessage();//此问题也可以在此处的票证报告中找到:

我通过不使用处理程序解决了这个问题,但在创建如下端口时添加了一个头:

Web服务创建 缺点 这段代码需要很多库来工作:JAXB、JAX-WS、StreamBuffer、Policy、Stax Ex、gmbal api,这对于仅仅添加一个头来说是非常糟糕的(特别是如果您使用的是没有maven支持的胖客户机)

WebServiceEndpoint endpoint = w.getWebServiceEndpointPort(new MTOMFeature());
Map<String, Object> ctxt = ((BindingProvider) endpoint).getRequestContext();
// Enable HTTP chunking mode, otherwise HttpURLConnection buffers
ctxt.put("com.sun.xml.ws.transport.http.client.streaming.chunk.size", 8192);
WSBindingProvider bp = (WSBindingProvider) endpoint;
bp.setOutboundHeaders(Headers.create(JAXBContext.newInstance(WSSecurityHeader.class), 
                      new WSSecurityHeader()));
@XmlRootElement(name = "Security")
public class WSSecurityHeader {

    @XmlElement(name = "UsernameToken")
    public WSSecurityUsernameToken usernameToken = new WSSecurityUsernameToken();
    ...
}