gpt4 book ai didi

java - WLI 转换 xQuery 空节点

转载 作者:太空宇宙 更新时间:2023-11-04 15:07:46 27 4
gpt4 key购买 nike

我正在使用带有 Hibernate 的 WLI SOA 应用程序。

我有以下类(class):

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 抽象类中,我进行了以下转换:

@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);

xQuerytransformModelXMLToPersonDBModel.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 响应中记录以下错误:

fc:JWSError Unhandled process exception com.bea.wli.bpm.runtime.UnhandledProcessException: Unhandled process exception [ServiceException] at com.bea.wli.bpm.runtime.JpdContainer.preInvoke(JpdContainer.java:1043) at com.bea.wli.knex.runtime.core.container.Invocable.invoke(Invocable.java:248) at com.bea.wli.bpm.runtime.JpdContainer.invoke(JpdContainer.java:814) at com.bea.wli.knex.runtime.core.bean.BaseContainerBean.invokeBase(BaseContainerBean.java:224) at com.bea.wli.knex.runtime.core.bean.SLSBContainerBean.invoke(SLSBContainerBean.java:136) at com.bea.wlwgen.StatelessContainer_2hozgx_ELOImpl.invoke(StatelessContainer_2hozgx_ELOImpl.java:137) at com.bea.wlwgen.SLSBContAdpt.invokeOnBean(SLSBContAdpt.java:29) at com.bea.wli.knex.runtime.core.bean.BaseDispatcherBean.runAsInvoke(BaseDispatcherBean.java:185) at com.bea.wli.knex.runtime.core.bean.BaseDispatcherBean.invoke(BaseDispatcherBean.java:54) at com.bea.wli.knex.runtime.core.bean.SyncDispatcherBean.invoke(SyncDispatcherBean.java:168) at com.bea.wli.knex.runtime.core.bean.SyncDispatcher_k1mrl8_EOImpl.invoke(SyncDispatcher_k1mrl8_EOImpl.java:133) at com.bea.wli.knex.runtime.core.dispatcher.Dispatcher.remoteDispatch(Dispatcher.java:165) at com.bea.wli.knex.runtime.core.dispatcher.Dispatcher.dispatch(Dispatcher.java:49) at com.bea.wli.knex.runtime.core.dispatcher.HttpServerHelper.executePostRequest(HttpServerHelper.java:711) at com.bea.wli.knex.runtime.core.dispatcher.HttpServer.doPost(HttpServer.java:33) at com.bea.wli.bpm.runtime.JpdServlet.doPost(JpdServlet.java:253) at javax.servlet.http.HttpServlet.service(HttpServlet.java:763) at javax.servlet.http.HttpServlet.service(HttpServlet.java:856) at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227) at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125) at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:283) at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:175) at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3231) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121) at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2002) at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:1908) at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1362) at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209) at weblogic.work.ExecuteThread.run(ExecuteThread.java:181) Caused by: com.bea.wli.bpm.runtime.UnhandledProcessException: Unhandled process exception at com.bea.wli.bpm.runtime.Activity.processException(Activity.java:380) at com.bea.wli.bpm.runtime.OnException.rethrow(OnException.java:101) at com.bea.wli.bpm.runtime.OnException.execute(OnException.java:198) at com.bea.wli.bpm.runtime.SyncReceive.messageDelivery(SyncReceive.java:63) at com.bea.wli.bpm.runtime.ProcessState.processMessage(ProcessState.java:217) at com.bea.wli.bpm.runtime.ProcessState.dispatchRequest(ProcessState.java:241) at com.bea.wli.bpm.runtime.JpdContainer.dispatchProcessRequest(JpdContainer.java:1077) at com.bea.wli.bpm.runtime.JpdContainer.preInvoke(JpdContainer.java:1041) ... 29 more Caused by: com.bea.transform.TransformException: Unexpected error in transformation - please look at the log for details. at com.bea.wli.transform.TransformExecutor.executeXQ2004(TransformExecutor.java:245) at com.bea.wli.transform.TransformExecutor.execute(TransformExecutor.java:94) at com.bea.wli.transform.runtime.DtfDispMethod.invoke(DtfDispMethod.java:393) at com.bea.wli.knex.runtime.core.container.Invocable.invoke(Invocable.java:503) at com.bea.wli.knex.runtime.core.container.Invocable.invoke(Invocable.java:476) at com.bea.wli.transform.runtime.DtfHandler.invoke(DtfHandler.java:112) at com.process.transformations.TransaformTransactionModelImpl.transformModelXMLToPersonDBModel(TransaformTransactionModelImpl.java:436) at com.process.ModeloPerson.transformModelXMLToPersonDBModel(ModeloPerson.java:163) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at com.bea.wli.bpm.runtime.Perform.invoke(Perform.java:39) at com.bea.wli.bpm.runtime.Perform.execute(Perform.java:50) ... 34 more Caused by: java.lang.NullPointerException at com.bea.wli.xquery.marshall.xq2004.ClassUnmarshaller.isFullNode(ClassUnmarshaller.java:225) at com.bea.wli.xquery.marshall.xq2004.ClassUnmarshaller.unmarshall(ClassUnmarshaller.java:78) at com.bea.wli.xquery.marshall.xq2004.PlanUnmarshaller.unmarshall(PlanUnmarshaller.java:13) at com.bea.wli.transform.TransformExecutor.executeXQ2004(TransformExecutor.java:231) ... 47 more

我认为问题是当我在 xQuery 中发送一个空的 $object 时,但我不知道如何验证此参数(如果为 null)。

最佳答案

这只是一个猜测,但您可以尝试更改类型以指示该元素是可选的。例如

declare function xf:transformModelXMLToPersonDBModel($object as element(ns-1:Model)?) as element()? {
....
};

declare variable $object as element(ns-1:Model)? external;
xf:transformModelXMLToPersonDBModel($object)

请注意,我添加了可选指示符“?”在项目类型之后。

关于java - WLI 转换 xQuery 空节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21761715/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com