所以这是场景:
我们有 PeopleSoft,希望从销售人员来回发送消息。不幸的是,PeopleSoft 没有像 wsimport 这样的工具,它可以使用 wsdl 并为您生成类。有一些东西会消耗 wsdl,但它所做的只是生成存根消息对象。开发人员仍然需要编写代码来手动生成 xml 消息字符串。
我显然不想做所有这些。所以我知道可以从 PeopleSoft 内部调用 java。我还知道我可以仅使用生成的类发送消息,但我想使用 PeopleSoft 内置的消息监视功能。
所以我正在考虑的一个可能的解决方案是:
- 调用java中的webservice方法(不发送消息)
- 获取 xml
- 通过 peoplesoft 机制发送 xml
- 获取响应 xml
- 将响应 xml 传递回响应 java 类
- 使用 java 类获取 xml 中的值
我疯了还是这可能?
附注我是一名 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);
}
}
}
Java Web 服务中有一种系统方法可以实现此目的,即 JAX-WS。只需使用 SOAP Handler 应用拦截器模式。处理程序类将在handleMessage(SOAPMessageContext mc) 方法中拦截消息,对SOAP Envelope 的XML 正文执行您想要执行的任何操作。并停止 SOAPMessage 的进一步处理。
然后,您可以按照自己的喜好处理 XML(例如通过 peoplesoft 机制发送)。当响应从 peoplesoft 返回时,绕过出站处理程序链......(我真的必须看看如何绕过链)。我只是提出一个想法,你必须进行 POC。我从来没有这样做过,否则我会共享代码。但这是绝对可行的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)