我正在使用带有 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);
}
在转换抽象类中,我进行了以下转换:
@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>
这个回复没问题。
第二次,我测试以下请求以返回所有人员:
<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 .invoke(Invocable.java:476) 在 com.bea.wli.transform.runtime。
我认为问题是当我在 xQuery 中发送一个空的 $object 但我不知道如何验证此参数是否为空。