IBM WebSphere Jax-WS RI框架。 我有一个chunckHandler。 我需要向客户端发送一行xml响应。 我制作oneline xml。 Debuging显示什么都没问题 - xml是onelined。 但在发送之前,框架会产生“漂亮的打印”输出。 它需要签名和任何xml转换不需要。 一般问题:如何在SOAPHandler中发送xml数据而不进行任何转换。
public class SignHandler implements SOAPHandler<SOAPMessageContext>{
private String makeOneLineXml(String xml) throws IOException{
BufferedReader br = new BufferedReader(new StringReader(xml));
String line=null;
StringBuilder sb = new StringBuilder();
while((line=br.readLine())!= null){
sb.append(line.trim());
}
return sb.toString();
}
public boolean handleMessage(SOAPMessageContext context) {
Boolean isRequest = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
//for response message only, true for outbound messages, false for inbound
if(isRequest){
try{
SOAPMessage soapMsg = context.getMessage();
SOAPEnvelope soapEnv = soapMsg.getSOAPPart().getEnvelope();
SOAPHeader soapHeader = soapEnv.getHeader();
Document orig = soapEnv.getOwnerDocument();
orig =
// I need send to client one-line-xml
XmlUtils.deserialize(makeOneLineXml(XmlUtils.serializeNode(signedSoap, false, false)));
soapMsg.saveChanges();
//tracking
soapMsg.writeTo(System.out); // In CONSOLE ALL ok. Xml is one line
}catch(SOAPException e){
System.err.println(e);
}catch(IOException e){
System.err.println(e);
}
}
//continue other handler chain
return true;
}
答案 0 :(得分:0)
我在SoapUI中进行的所有测试。但默认情况下,soapUI响应是非常合理的。 这个问题都存在。
在SoapMessage中替换可选的soap xml,你可以使用它:
private SOAPMessage makeSOAPMessage(String msg)
{
try {
SOAPMessage message = MessageFactory.newInstance().createMessage();
StringReader sReader = new StringReader(msg);
message.getSOAPPart().setContent(new StreamSource(sReader));
message.saveChanges();
return message;
}
catch (Exception e) {
return null;
}
}
.....................
context.setMessage(makeSOAPMessage(yours_xml_string));
在此之后,您将在客户端收到此xml_string。 它对xmldsig,jax-wss安全问题很有用。