/*
* JBoss, Home of Professional Open Source Copyright 2006, JBoss Inc., and
* individual contributors as indicated by the @authors tag. See the
* copyright.txt in the distribution for a full listing of individual
* contributors.
*
* This is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This software is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this software; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA, or see the FSF
* site: http://www.fsf.org.
*/
package org.jboss.test.ws.jaxws.samples.xop.doclit;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
import javax.xml.namespace.QName;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import javax.xml.ws.WebServiceException;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.soap.SOAPHandler;
import javax.xml.ws.handler.soap.SOAPMessageContext;
/**
* A SOAPHandler that checks for Include elements in the
* outbound SOAPMessage in order to see if MTOM is enabled.
*
* @author alessio.soldano@jboss.com
* @since 15-Jan-2009
*/
public class MTOMCheckClientHandler implements SOAPHandler<SOAPMessageContext>
{
public boolean handleMessage(SOAPMessageContext smc)
{
try
{
return check(smc);
}
catch (Exception e)
{
throw new WebServiceException(e);
}
}
public boolean handleFault(SOAPMessageContext smc)
{
//NOOP
return true;
}
private static boolean check(SOAPMessageContext smc) throws SOAPException, IOException
{
Boolean outboundProperty = (Boolean)smc.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
if (outboundProperty.booleanValue())
{
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
SOAPMessage message = smc.getMessage();
message.writeTo(outputStream);
String messageString = outputStream.toString();
if (!messageString.contains("Include"))
throw new IllegalStateException("XOP request inlined");
}
return true;
}
public void close(MessageContext messageContext)
{
//NOOP
}
public Set<QName> getHeaders()
{
return new HashSet<QName>(); //empty set
}
}