シナリオは次のとおりです。PeopleSoftがあり、セールスフォースとの間でメッセージをやり取りしたいと考えています。残念ながら、PeopleSoftには、wsdlを使用してクラスを生成するwsimportのようなツールがありません。wsdlを消費するものがありますが、それはすべてスタブメッセージオブジェクトを生成します。開発者は、xmlメッセージ文字列を手動で生成するためのコードを作成する必要があります。
私は明らかにそのすべてをやりたくありません。したがって、JavaはPeopleSoft内から呼び出すことができることを私は知っています。生成されたクラスを使用するだけでメッセージを送信できることも知っていますが、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);
}
}
}