所以这里是这样的场景:我们有 PeopleSoft,想从 salesforce 来回发送消息。不幸的是,PeopleSoft 没有像 wsimport 这样使用 wsdl 并为您生成类的工具。有些东西会消耗 wsdl,但它所做的一切都是生成存根消息对象。开发人员仍然需要编写代码来手动生成 xml 消息字符串。
我显然不想做所有这些。所以我知道可以从 PeopleSoft 中调用 java。我也知道我可以只使用生成的类来发送消息,但我想使用 PeopleSoft 内置的消息监控功能。
因此,我正在考虑的一个可能的解决方案是:
- 在java中调用webservice方法(不发送消息)
- 获取xml
- 通过 peoplesoft 机制发送 xml
- 获取响应 xml
- 将响应 xml 传递回响应 java 类
- 使用 java 类在 xml 中获取值
我疯了还是这可能?
ps 我是新手 java 开发者
这是我的处理程序类来获取 xml,但需要一些方法来防止消息被发送出去。
public class LoggingHandler implements SOAPHandler<SOAPMessageContext> {
// change this to redirect output if desired
private static PrintStream out = System.out;
private String xmlOut = null;
public Set<QName> getHeaders() {
return null;
}
public boolean handleMessage(SOAPMessageContext smc) {
logToSystemOut(smc);
return true;
}
public boolean handleFault(SOAPMessageContext smc) {
logToSystemOut(smc);
return true;
}
// nothing to clean up
public void close(MessageContext messageContext) {
}
public String getXmlOut() {
return xmlOut;
}
/*
* Check the MESSAGE_OUTBOUND_PROPERTY in the context
* to see if this is an outgoing or incoming message.
* Write a brief message to the print stream and
* output the message. The writeTo() method can throw
* SOAPException or IOException
*/
private void logToSystemOut(SOAPMessageContext smc) {
Boolean outboundProperty = (Boolean)
smc.get (MessageContext.MESSAGE_OUTBOUND_PROPERTY);
SOAPMessage message = smc.getMessage();
try {
ByteArrayOutputStream baOut = new ByteArrayOutputStream();
message.writeTo(baOut);
xmlOut = new String(baOut.toByteArray());
} catch (Exception e) {
out.println("Exception in handler: " + e);
}
}
}