Hibernate で WLI SOA アプリケーションを使用しています。
私は次のクラスを持っています:
class PersonDB implements Serializable {
Integer id;
String name;
Date dob;
/** getters and setters **/
}
ModelPerson JPD には、次の変換があります。
PersonDB personDB;
ModelDocument modelXML;
void transformModelXMLToPersonDBModel throws Exception {
this.personDB = transformTransactioModel.transformModelXMLToPersonDBModel(this.modelXML);
}
Transform Abstract Class には、次の変換があります。
@com.bea.wli.transform.XQueryTransform(transformType = com.bea.wli.transform.XQueryTransform.TransformMethodType.XQUERY_REF, value = "transformModelXMLToPersonDBModel.xq", schemaValidate = @com.bea.wli.transform.XQueryTransform.SchemaValidate(returnValue = false, parameters = false))
public abstract PersonDB transformModelXMLToPersonDBModel(ModelDocument object);
xQuery transformModelXMLToPersonDBModel.xq は次のとおりです。
declare namespace xf = "http://tempuri.org/Dominio/src/com/process/transformations/transformModelXMLToPersonDBModel/";
declare namespace ns-1 = "person.model.tempuri.com";
declare function xf:transformModelXMLToPersonDBModel($object as element(ns-1:Model)) as element() {
for $o in $object return (
<PersonDB>
{
for $code in $o/code
return
<id?>{ data($code) }</id>
}
{
for $nameOfPerson in $o/nameOfPerson
return
<name?>{ data($nameOfPerson)}</name>
}
{
for $date in $o/date
return
<dob?>{ data($date) }</dob>
}
</PersonDB>
)
};
declare variable $object as element(ns-1:Model) external;
xf:transformModelXMLToPersonDBModel($object)
後で、SoapUI を介して操作をテストするときに、最初に次の要求を試します。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:open="http://www.openuri.org/" xmlns:pers="person.model.tempuri.com">
<soapenv:Header/>
<soapenv:Body>
<open:find>
<pers:Model>
<!--Optional:-->
<code>100</code>
<!--Optional:-->
<nameOfPerson>John</nameOfPerson>
<!--Optional:-->
<date>1985-11-23T12:44:07</date>
</pers:Model>
</open:find>
</soapenv:Body>
</soapenv:Envelope>
この対応はOKです。
2 回目は、次のリクエストをテストして、すべての人を返します。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:open="http://www.openuri.org/" xmlns:pers="person.model.tempuri.com">
<soapenv:Header/>
<soapenv:Body>
<open:find>
<pers:Model>
</pers:Model>
</open:find>
</soapenv:Body>
</soapenv:Envelope>
この応答は、SoapUI 応答で次のエラーを記録します。
bea.wli.bpm.runtime.ProcessState.dispatchRequest(ProcessState.java:241) com.bea.wli.bpm.runtime.JpdContainer.dispatchProcessRequest(JpdContainer.java:1077) com.bea.wli.bpm.runtime. JpdContainer.preInvoke(JpdContainer.java:1041) ... 29 詳細 原因: com.bea.transform.TransformException: 変換で予期しないエラーが発生しました - 詳細についてはログを参照してください。com.bea.wli.transform.TransformExecutor.executeXQ2004(TransformExecutor.java:245) com.bea.wli.transform.TransformExecutor.execute(TransformExecutor.java:94) com.bea.wli.transform.runtime.DtfDispMethod .invoke(DtfDispMethod.java:393) com.bea.wli.knex.runtime.core.container.Invocable.invoke(Invocable.java:503) com.bea.wli.knex.runtime.core.container.Invocable com.bea.wli.transform.runtime の .invoke(Invocable.java:476)。
問題は、xQuery で空の $object を送信したときだと思いますが、null の場合にこのパラメーターを検証する方法がわかりません。