2017-08-17 1 views
0

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 ...

答えて

0

あなたがXMLからJavaへ行くかわりにUnmarshallerのを使用する必要があるオブジェクト。簡単な例

こんにちはEscay、答えに提供されたリンクは、両方のマーシャリングをしながら、我々は検証を有効にすることができ、私はすでにJavaオブジェクトを有するがおりますのでunmarshalling.Iはマーシャリングのプロセスを選んだと言うHow to validate an XML against schema using JAXB?

+0

に同様の質問を見ますそれは動作していません。私はアンマーシャリングプロセスも試しましたが、JavaオブジェクトをXML文字列に変換すると、無効なコンテンツが消えてタグが空のままになっていることがわかりました。 abcd に変更されました。今私は空のタグを許可しているので、これは検証に捕らわれていません。これにはどんな解決策がありますか? – Asim

+0

はい、あなたの質問は、アンマーシャリングが必要なXMLからJavaオブジェクトへの移行から始まります。スキーマ検証用のコード例は、JavaオブジェクトからXML(マーシャリング)に移行します。これは、質問の開始に基づいて正しくありません。あなたの質問で提供されているxsdは、あまりにも時間がかかりすぎてポイントに到達できません。一般的に質問は、私が言及したものの複製です。使用可能な例がたくさんあります。例を再現し、xsdをxsdに置き換えてください。 – Escay

関連する問題