2

SOAPMessage をバイト配列に変換して、暗号化してから、プロキシ サーバーで復号化し、代わりに Web サービスを呼び出したいと考えています。問題は、SOAPMessage が実装されていないjava.io.Serializableため、暗号化を続行できないことです。

これをシリアライズに使用しました

public static byte[] serializeSoapMessage (SOAPMessage sm){
    try {

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        sm.writeTo(baos);
       byte[] bytes= baos.toByteArray();
       return bytes;
    } catch (SOAPException ex) {
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    }
    return null;
}

しかし、デシリアライゼーションは問題ObjectInputStreamです。java.io.Serializable

よろしくお願いします:)

4

1 に答える 1

1

SOAPMessage.writeTo何をしているのか(またはオブジェクトストリームがどのように機能するのか)をよく理解していないと思います。私が知る限りwriteTo、 の XML を作成し、SOAPMessage指定されたストリームにバイトとして書き込みます。それを読み取るには、 aMessageFactoryとそのcreateMessageメソッドを使用します。ストリームに書き込まれる情報はオブジェクト (ObjectInputStream期待されるもの) ではなく、データです。

必要なことを行うには、をラップByteArrayOutputStreamしてCipherOutputStream(ストリームを暗号化ストリームでラップする方法については、この質問sm.writeTo(cipherOutputStream)を参照してください)、代わりに呼び出します。これにより、ストリーム上のバイトが暗号化され、そのバイトを Web サービスに送信できます。

受信したバイトを でラップし、それを でラップしてByteArrayInputStreamWebサービスに復号化を実行させます。結果を に渡すと、元の SOAPMessage が再構築されます。CipherInputStreamCipherInputStreamMessageFactory

確かに、私は Web サービスの専門家ではないので、特定のソリューションの実用的なコードを提供することはできませんが、このアプローチbyte[]により、暗号化されたSOAPMessage.

いずれにせよ、オブジェクト ストリームは何も暗号化しないことに注意してください。出力が多かれ少なかれ読めないため、そう思うかもしれませんが、決して暗号化されていません。暗号化を取得する唯一の方法は、暗号化を使用することです。

あなたのためのいくつかの参照:

始めるにはこれで十分だと思います。

于 2012-10-13T02:41:14.823 に答える