基本上,我的dataHandler
内容应该是引用肥皂附件ID的字符串,但是我的Stub会根据传递给Stub的DataHandler对象放置base64string。
在发送之前,如何“侵入”邮件正文?
env.getBody().toString().replaceAll(pattern, "<dataHandler>cid:" + cid + "</dataHandler")
完全满足我的要求,但是env.getBody().setText
并没有设置正文**
// create a message context
_messageContext = new org.apache.axis2.context.MessageContext();
// Modified
// Attachment
String cid = _messageContext.addAttachment(dispatchDocumentRequest8.getDataDescription().getDataHandler());
// create SOAP envelope with that payload
org.apache.axiom.soap.SOAPEnvelope env = null;
env = toEnvelope(getFactory(_operationClient.getOptions().getSoapVersionURI()),
dispatchDocumentRequest8,
optimizeContent(new javax.xml.namespace.QName("com.test",
"dispatchDocument")));
// Modified
String pattern = "(?s)<dataHandler[^>]*>.*?</dataHandler>";
env.getBody().setText(env.getBody().toString().replaceAll(pattern, "
<dataHandler>cid:" + cid + "</dataHandler"));
答案 0 :(得分:0)
Never ever使用正则表达式解析XML / HTML / YML /任何其他ML!
使用适当的解析器。有three different parsers for XML:DOM,SAX,StAX。但是在您的情况下,您已经通过getBody()
获得了XML!
final Document doc = env.getBody().extractContentAsDocument();
final NodeList nodes = doc.getElementsByTagName("dataHandler")
// Do stuff like
IntStream.range(0, nodes.getLength()).mapToObj(nodes::item).forEach(item->{
item.setNodeValue(…);
});