我在Axis引擎中部署了一个handler,希望用它能够将传递进来的SOAP消息中的一个子元素删除掉,但是用下面的代码似乎只能删除本地SOAPMessage对象中的子元素,对MessageContext无效,也就是还是不能删除传递的SOAP消息中的元素,不知原因何在,还望各位大牛执教,代码如下:
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.io.FileNotFoundException;
import org.apache.axis.AxisFault;
import org.apache.axis.MessageContext;
import org.apache.axis.Message;
import org.apache.axis.handlers.BasicHandler;
import javax.xml.soap.*;
import java.util.*;
public class WSDemoHandler extends BasicHandler
{
public void invoke(MessageContext msgContext) throws AxisFault
{
SOAPMessage msg=msgContext.getMessage();
SOAPPart part = msg.getSOAPPart();
SOAPEnvelope env = null;
SOAPBody body =null;
try {
env = part.getEnvelope();
Name nm = env.createName("inputFile");//要删除掉的子元素名称为“inputFile”
Iterator it = body.getChildElements();//搜寻每个根元素,要删除的子元素在其中的一个根元素下
while(it.hasNext())
{
SOAPElement child =(SOAPElement)it.next();
Iterator target = child.getChildElements(nm);
while(target.hasNext())
{
SOAPElement temp = (SOAPElement)itChild2.next();
temp.detachNode();
temp.recycleNode();
msg.saveChanges();//不知道是否需要加这句话?
System.out.println("delete the child Element");
}
}
} catch (SOAPException e) {
e.printStackTrace(); //To change body of catch statement use Options | File Templates.
}
}
}
--
FROM 202.112.136.*