WebサービスにXMLパケットを送信しています。このXMLはjaxbによってオブジェクトに変換されています。これをxsdに対して検証したいのですが、XMLパケットにはNSDGの詳細というタグがあります。 JAXBスキーマ検証が正しく機能していません
<NSDGDetails>
<Keys>
<Key Type="sapconnector" />
</Keys>
<TargetDetails>
<Organisation>Gateway</Organisation>
</TargetDetails>
<NSDGValidation>
<Processed>no</Processed>
<Result>pass</Result>
</NSDGValidation>
<ChannelRouting>
<Channel>
<URI>e:channeluri</URI>
<Product>e:channelproduct</Product>
<Version>e:channelverion</Version>
</Channel>
<ID Type="">id</ID>
<Timestamp>2015-01-12T17:24:05.835+05:30</Timestamp>
</ChannelRouting>
</NSDGDetails>
は今、私はNSDGDetailsタグ
<NSDGDetails>abcd<NSDGDetails>
に「ABCD」のようなものを渡すときXSDに対する要求を検証しながら、私はエラーを取得する必要があることを期待しています。以下は
私はこのシナリオで任意のエラーを取得していない午前、スキーマ検証
JAXBContext sdjaxbContext =
JAXBContext.newInstance(SubmitDocument.class);
JAXBContext NsdgMsgJaxbContext =
JAXBContext.newInstance(NSDGMessage.class);
SchemaFactory sf =
SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = sf.newSchema(new File("xsd0.xsd"));
Marshaller marshaller = NsdgMsgJaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.setSchema(schema);
ValidationEventCollector validationCollector = new
EsangamValidationEventHandler();
marshaller.setEventHandler(validationCollector);
marshaller.marshal(message, System.out); // where message is the object of NSDGMessage class
if(validationCollector.hasEvents())
{ throw some errror. I am expecting an error in case of <NSDGDetails>random value </NSDGetails>
}
ための私のコードですが。 JAXBで生成されたXSDファイルとNSDGMessageクラスは、私が試した xsd NSDGMessage
ことの一つは、文字列にメッセージオブジェクトを変換することで、ここで発見され、
<NSDGDetails>abcd<NSDGDetails> is changed to <NSDGDetails><NSDGDetails>私はバリができない理由、これがあると信じていることを見つけることができます無効なデータが削除されるため、エラーをキャッチします。
Helpp ...
に同様の質問を見ますそれは動作していません。私はアンマーシャリングプロセスも試しましたが、JavaオブジェクトをXML文字列に変換すると、無効なコンテンツが消えてタグが空のままになっていることがわかりました。 abcd が NSDG詳細>に変更されました。今私は空のタグを許可しているので、これは検証に捕らわれていません。これにはどんな解決策がありますか? –
Asim
はい、あなたの質問は、アンマーシャリングが必要なXMLからJavaオブジェクトへの移行から始まります。スキーマ検証用のコード例は、JavaオブジェクトからXML(マーシャリング)に移行します。これは、質問の開始に基づいて正しくありません。あなたの質問で提供されているxsdは、あまりにも時間がかかりすぎてポイントに到達できません。一般的に質問は、私が言及したものの複製です。使用可能な例がたくさんあります。例を再現し、xsdをxsdに置き換えてください。 – Escay