用Java替换字符串

时间:2018-12-13 13:07:36

标签: java

基本上,我的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"));

1 个答案:

答案 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(…);
});