これはシナリオです: 私たちはPeopleSoftを持っており、salesforceからメッセージを前後に送信したいと考えています。残念ながら、PeopleSoftにはwsdlを使用してクラスを生成するwsimportのようなツールはありません。 wsdlを消費するものがありますが、それはすべてスタブメッセージオブジェクトを生成します。開発者はxmlメッセージ文字列を手動で生成するコードを書く必要があります。xmlを生成するのにjax-wsを使用できますか?
私は明らかにそのすべてをしたくありません。ですから、JavaはPeopleSoft内から呼び出すことができます。また、生成されたクラスを使用してメッセージを送信することもできますが、PeopleSoftに組み込まれているメッセージ監視機能を使用したいと考えています。
だから私は意志を考えています可能な解決策:(メッセージを送信せずに)
- コールJavaでWebサービスメソッド
- グラブXML
- は、PeopleSoftの機構を介してXMLを送信
- レスポンスXMLを取得する
- 応答XMLクラスを応答Javaクラスに戻す
- Javaクラスを使用してgraを使用するb値はxml内
私は夢中ですか?
p.s.私は初心者の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);
}
}
}
新しいWebサービスエンドポイントを作成する場合は、SEIはより抽象度の高いものであり、生成されたXMLを処理するため、SEI JAX-WSメカニズムの代わりにプロバイダベースのメカニズムを使用します。 –
私は、例を見てハンドラクラスを実装しましたが、それ以降の処理からどのようにしてSOAPメッセージを止めることができないのか分かりません。それについてのヒント? 私のハンドラクラスは次のとおりです。 'public boolean handleMessage(SOAPMessageContext smc){ logToSystemOut(smc); がtrueを返します。 } プライベートvoid logToSystemOut(SOAPMessageContext smc){ SOAPMessage message = smc.getMessage(); try { ByteArrayOutputStream baOut = new ByteArrayOutputStream(); message.writeTo(baOut); xmlOut = new String(baOut.toByteArray()); } } – willard
1. SalesForceによって公開されているPeopleSoftからサービスを呼び出していると思います。したがって、クライアントサイドでHandlerを定義する必要があります。これは、クライアントサイドのランタイムが生成するSOAPメッセージを傍受したいからです(PeopleSoftのメカニズムを経由することができるように)。ハンドラを定義した方法は、サーバ側でハンドラを定義するために使用されます。クライアントサイドハンドラは、別々に定義されています。アイデアを得るにはhttp://bit.ly/zGermlを参照してください。 –