1

JMeter に返された XML を検証するためにDTDまたはXSD形式のスキーマを使用すると問題が発生します。

私が得ているエラーコードはこれです。

Assertion error: true
Assertion failure: false
Assertion failure message: error: line=1 col=71 schema_reference.4: Failed to read schema document 'schema.dtd', because 
1) could not find the document; 
2) the document could not be read; 
3) the root element of the document is not <xsd:schema>.

スキーマが Jmeter テストと同じ場所にあり、読み取り専用ではないことなどを確認しました。

サンプルDTD

<!ELEMENT userId (#PCDATA)>
<!ELEMENT recordId (#PCDATA)>
<!ELEMENT operationDateTime (#PCDATA)>
<!ELEMENT operationCode (#PCDATA)>
<!ELEMENT oldVal (#PCDATA)>
<!ELEMENT newVal (#PCDATA)>
<!ELEMENT listOfAuditItems ((auditItem))>
<!ELEMENT fieldName (#PCDATA)>
<!ELEMENT buscomp (#PCDATA)>
<!ELEMENT auditItem ((recordId, userId, operationCode, buscomp, operationDateTime, fieldName, oldVal, newVal))>
<!ELEMENT ariResponse ((listOfAuditItems))>

ここでDTDファイルの有効性をチェックしたところ、合格しました!

サンプル XML

    <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
    <ariResponse>
        <listOfAuditItems>
            <auditItem>
                <recordId>2-1DFSGT</recordId>
                <userId>1-1SJKJS</userId>
                <operationCode>Modify</operationCode>
                <buscomp>Service Request</buscomp>
                <operationDateTime>2010-05-12T15:23:53.000+05:30</operationDateTime>
                <fieldName />
                <oldVal />
                <newVal />
                <auditLog>2*C311*EVT_STAT_CD16*TODO_PLAN_END_DT11*OWNER_LOGIN2*N34*Open19*2011-01-06
                    16:28:567*RITESHP2*O30*0*0*
                </auditLog>
            </auditItem>
        </listOfAuditItems>
        <returncode>0</returncode>
        <errormessage />
    </ariResponse>

ありがとう!

4

1 に答える 1

0

要約: 最終的に、アサーションのファイル名パラメーターとしてhttp://path.to.schema/myschema.xsdを使用しました。

説明: Alies Belik のアドバイスに従って、スキーマをセットアップするためのコードが次のようになっていることがわかりました。

DocumentBuilderFactory parserFactory = DocumentBuilderFactory.newInstance();
...
parserFactory.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaSource", xsdFileName);

xsdFileName は文字列です (属性文字列は実際には定数です。読みやすくするためにインライン化しています)。

このページなどによると、属性は、文字列の形式の場合、HTTP URL を含む URI として解釈されます。HTTP 経由でスキーマにアクセスできるようになっているので、このソリューションを選択しました。

于 2012-11-23T09:51:35.157 に答える