Oracle SOA - 从源 XML 读取空字符串时发生转换错误
Oracle SOA - Transformation Error Reading an Empty String from source XML
我正在处理 SOA BPEL 组合,我从 XML 文件中获取数据并将其加载到数据库中。在我的 BPEL 流程转换中,XSLT 失败,我在下面收到此错误消息。
无法转换源 XML。 oracle.xml.xpath.XpathException:表达式错误:空字符串
空字符串指的是什么?
XSD 文件:(来源 XML)
<?xml version='1.0' encoding='windows-1252'?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.mycompany.com"
targetNamespace="http://www.mycompany.com" elementFormDefault="qualified">
<xsd:element name="MyCompanyEnvelope">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Header">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="DocumentVersion" type="xsd:integer"/>
<xsd:element name="MerchantIdentifier"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="MessageType"/>
<xsd:element name="Message">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="MessageID" type="xsd:integer"/>
<xsd:element name="PaymentReport">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ORDER_NUM" type="xsd:string"/>
<xsd:element name="SOURCE"/>
<xsd:element name="CustomerData">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="EMAIL_ADDRESS" type="xsd:string"/>
<xsd:element name="PHONE" type="xsd:integer"/>
<xsd:element name="LAST_NAME" type="xsd:string"/>
<xsd:element name="FIRST_NAME" type="xsd:string"/>
<xsd:element name="BILL_ADR_L1" type="xsd:string"/>
<xsd:element name="BILL_ADR_L2"/>
<xsd:element name="BILL_ADR_CITY" type="xsd:string"/>
<xsd:element name="BILL_ADR_STATE" type="xsd:string"/>
<xsd:element name="BILL_ADR_COUNTRY" type="xsd:string"/>
<xsd:element name="BILL_ADR_ZIP" type="xsd:integer"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="PaymentData">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Payment" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="MODEL" type="xsd:integer"/>
<xsd:element name="STYLE_NO" type="xsd:string"/>
<xsd:element name="PAYMENT_DESCRIPTION" type="xsd:string"/>
<xsd:element name="STATUS_CODE" type="xsd:string"/>
<xsd:element name="CREATED_BY" type="xsd:string"/>
<xsd:element name="CREATION_DATE" type="xsd:string"/>
<xsd:element name="LAST_UPDATE_DATE" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
XSLT - 转换文件:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:mhdr="http://www.oracle.com/XSL/Transform/java/oracle.tip.mediator.service.common.functions.MediatorExtnFunction" xmlns:oraext="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xp20="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20" xmlns:xref="http://www.oracle.com/XSL/Transform/java/oracle.tip.xref.xpath.XRefXPathFunctions" xmlns:ns0="http://www.mycompany.com" xmlns:socket="http://www.oracle.com/XSL/Transform/java/oracle.tip.adapter.socket.ProtocolTranslator" xmlns:oracle-xsl-mapper="http://www.oracle.com/xsl/mapper/schemas" xmlns:dvm="http://www.oracle.com/XSL/Transform/java/oracle.tip.dvm.LookupValue" xmlns:tns="http://xmlns.oracle.com/pcbpel/adapter/db/top/dbMyCompanyPaymentRequest" xmlns:oraxsl="http://www.oracle.com/XSL/Transform/java" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes=" xsd oracle-xsl-mapper xsi xsl ns0 tns mhdr oraext xp20 xref socket dvm oraxsl"
xmlns:plt="http://schemas.xmlsoap.org/ws/2003/05/partner-link/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:pc="http://xmlns.oracle.com/pcbpel/"
xmlns:ns1="http://xmlns.oracle.com/pcbpel/adapter/file/default/MyCompanyPaymentRequest/ReadPaymentRequestFile"
xmlns:jca="http://xmlns.oracle.com/pcbpel/wsdl/jca/"
xmlns:ns2="http://xmlns.oracle.com/pcbpel/adapter/db/default/MyCompanyPaymentRequest/dbMyCompanyPaymentRequest">
<oracle-xsl-mapper:schema>
<!--SPECIFICATION OF MAP SOURCES AND TARGETS, DO NOT MODIFY.-->
<oracle-xsl-mapper:mapSources>
<oracle-xsl-mapper:source type="WSDL">
<oracle-xsl-mapper:schema location="../ReadPaymentRequestFile.wsdl"/>
<oracle-xsl-mapper:rootElement name="MyCompanyEnvelope" namespace="http://www.mycompany.com"/>
</oracle-xsl-mapper:source>
</oracle-xsl-mapper:mapSources>
<oracle-xsl-mapper:mapTargets>
<oracle-xsl-mapper:target type="WSDL">
<oracle-xsl-mapper:schema location="../dbMyCompanyPaymentRequest.wsdl"/>
<oracle-xsl-mapper:rootElement name="XxtgRepReqCustHdrStgCollection" namespace="http://xmlns.oracle.com/pcbpel/adapter/db/top/dbMyCompanyPaymentRequest"/>
</oracle-xsl-mapper:target>
</oracle-xsl-mapper:mapTargets>
<!--GENERATED BY ORACLE XSL MAPPER 12.2.1.0.0(XSLT Build 151013.0700.0085) AT [TUE NOV 16 17:31:43 SGT 2021].-->
</oracle-xsl-mapper:schema>
<!--User Editing allowed BELOW this line - DO NOT DELETE THIS LINE-->
<xsl:template match="/">
<tns:XxtgRepReqCustHdrStgCollection>
<xsl:for-each select="">
<tns:XxtgRepReqCustHdrStg>
<tns:paymentId/>
<tns:paymentNum>
<xsl:value-of select="/ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:ORDER_NUM"/>
</tns:paymentNum>
<tns:customerType/>
<tns:custFirstName>
<xsl:value-of select="/ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:CustomerData/ns0:FIRST_NAME"/>
</tns:custFirstName>
<tns:custLastName>
<xsl:value-of select="/ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:CustomerData/ns0:LAST_NAME"/>
</tns:custLastName>
<tns:custFullName xsi:nil="">
<xsl:value-of select="concat (/ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:CustomerData/ns0:LAST_NAME, /ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:CustomerData/ns0:FIRST_NAME )"/>
</tns:custFullName>
<tns:primaryEmail>
<xsl:value-of select="/ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:CustomerData/ns0:EMAIL_ADDRESS"/>
</tns:primaryEmail>
<tns:billAddress1>
<xsl:value-of select="/ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:CustomerData/ns0:BILL_ADR_L1"/>
</tns:billAddress1>
<tns:billAddress2>
<xsl:value-of select="/ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:CustomerData/ns0:BILL_ADR_L2"/>
</tns:billAddress2>
<tns:billCity>
<xsl:value-of select="/ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:CustomerData/ns0:BILL_ADR_CITY"/>
</tns:billCity>
<tns:billState>
<xsl:value-of select="/ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:CustomerData/ns0:BILL_ADR_STATE"/>
</tns:billState>
<tns:billZip>
<xsl:value-of select="/ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:CustomerData/ns0:BILL_ADR_ZIP"/>
</tns:billZip>
<tns:billCountry>
<xsl:value-of select="/ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:CustomerData/ns0:BILL_ADR_COUNTRY"/>
</tns:billCountry>
<tns:rrPhone>
<xsl:value-of select="/ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:CustomerData/ns0:PHONE"/>
</tns:rrPhone>
<tns:xxtgRepReqCustLinesStgCollection>
<xsl:for-each select="">
<tns:XxtgRepReqCustLinesStg>
<tns:srStatus>
<xsl:value-of select="/ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:PaymentData/ns0:Payment/ns0:STATUS_CODE"/>
</tns:srStatus>
<tns:modelInfo>
<xsl:value-of select="/ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:PaymentData/ns0:Payment/ns0:MODEL"/>
</tns:modelInfo>
<tns:itemNum>
<xsl:value-of select="/ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:PaymentData/ns0:Payment/ns0:STYLE_NO"/>
</tns:itemNum>
<tns:ownerComments>
<xsl:value-of select="/ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:PaymentData/ns0:Payment/ns0:PAYMENT_DESCRIPTION"/>
</tns:ownerComments>
<tns:creationDate>
<xsl:value-of select="/ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:PaymentData/ns0:Payment/ns0:CREATION_DATE"/>
</tns:creationDate>
<tns:createdBy>
<xsl:value-of select="/ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:PaymentData/ns0:Payment/ns0:CREATED_BY"/>
</tns:createdBy>
<tns:lastUpdateDate>
<xsl:value-of select="/ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:PaymentData/ns0:Payment/ns0:LAST_UPDATE_DATE"/>
</tns:lastUpdateDate>
</tns:XxtgRepReqCustLinesStg>
</xsl:for-each>
</tns:xxtgRepReqCustLinesStgCollection>
</tns:XxtgRepReqCustHdrStg>
</xsl:for-each>
</tns:XxtgRepReqCustHdrStgCollection>
</xsl:template>
</xsl:stylesheet>
What is the empty string being referred to?
我相信是这样的:
<xsl:for-each select="">
虽然您的错误消息没有指向行号,但这无疑会产生错误。
我正在处理 SOA BPEL 组合,我从 XML 文件中获取数据并将其加载到数据库中。在我的 BPEL 流程转换中,XSLT 失败,我在下面收到此错误消息。
无法转换源 XML。 oracle.xml.xpath.XpathException:表达式错误:空字符串
空字符串指的是什么?
XSD 文件:(来源 XML)
<?xml version='1.0' encoding='windows-1252'?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.mycompany.com"
targetNamespace="http://www.mycompany.com" elementFormDefault="qualified">
<xsd:element name="MyCompanyEnvelope">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Header">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="DocumentVersion" type="xsd:integer"/>
<xsd:element name="MerchantIdentifier"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="MessageType"/>
<xsd:element name="Message">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="MessageID" type="xsd:integer"/>
<xsd:element name="PaymentReport">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ORDER_NUM" type="xsd:string"/>
<xsd:element name="SOURCE"/>
<xsd:element name="CustomerData">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="EMAIL_ADDRESS" type="xsd:string"/>
<xsd:element name="PHONE" type="xsd:integer"/>
<xsd:element name="LAST_NAME" type="xsd:string"/>
<xsd:element name="FIRST_NAME" type="xsd:string"/>
<xsd:element name="BILL_ADR_L1" type="xsd:string"/>
<xsd:element name="BILL_ADR_L2"/>
<xsd:element name="BILL_ADR_CITY" type="xsd:string"/>
<xsd:element name="BILL_ADR_STATE" type="xsd:string"/>
<xsd:element name="BILL_ADR_COUNTRY" type="xsd:string"/>
<xsd:element name="BILL_ADR_ZIP" type="xsd:integer"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="PaymentData">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Payment" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="MODEL" type="xsd:integer"/>
<xsd:element name="STYLE_NO" type="xsd:string"/>
<xsd:element name="PAYMENT_DESCRIPTION" type="xsd:string"/>
<xsd:element name="STATUS_CODE" type="xsd:string"/>
<xsd:element name="CREATED_BY" type="xsd:string"/>
<xsd:element name="CREATION_DATE" type="xsd:string"/>
<xsd:element name="LAST_UPDATE_DATE" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
XSLT - 转换文件:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:mhdr="http://www.oracle.com/XSL/Transform/java/oracle.tip.mediator.service.common.functions.MediatorExtnFunction" xmlns:oraext="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xp20="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20" xmlns:xref="http://www.oracle.com/XSL/Transform/java/oracle.tip.xref.xpath.XRefXPathFunctions" xmlns:ns0="http://www.mycompany.com" xmlns:socket="http://www.oracle.com/XSL/Transform/java/oracle.tip.adapter.socket.ProtocolTranslator" xmlns:oracle-xsl-mapper="http://www.oracle.com/xsl/mapper/schemas" xmlns:dvm="http://www.oracle.com/XSL/Transform/java/oracle.tip.dvm.LookupValue" xmlns:tns="http://xmlns.oracle.com/pcbpel/adapter/db/top/dbMyCompanyPaymentRequest" xmlns:oraxsl="http://www.oracle.com/XSL/Transform/java" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes=" xsd oracle-xsl-mapper xsi xsl ns0 tns mhdr oraext xp20 xref socket dvm oraxsl"
xmlns:plt="http://schemas.xmlsoap.org/ws/2003/05/partner-link/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:pc="http://xmlns.oracle.com/pcbpel/"
xmlns:ns1="http://xmlns.oracle.com/pcbpel/adapter/file/default/MyCompanyPaymentRequest/ReadPaymentRequestFile"
xmlns:jca="http://xmlns.oracle.com/pcbpel/wsdl/jca/"
xmlns:ns2="http://xmlns.oracle.com/pcbpel/adapter/db/default/MyCompanyPaymentRequest/dbMyCompanyPaymentRequest">
<oracle-xsl-mapper:schema>
<!--SPECIFICATION OF MAP SOURCES AND TARGETS, DO NOT MODIFY.-->
<oracle-xsl-mapper:mapSources>
<oracle-xsl-mapper:source type="WSDL">
<oracle-xsl-mapper:schema location="../ReadPaymentRequestFile.wsdl"/>
<oracle-xsl-mapper:rootElement name="MyCompanyEnvelope" namespace="http://www.mycompany.com"/>
</oracle-xsl-mapper:source>
</oracle-xsl-mapper:mapSources>
<oracle-xsl-mapper:mapTargets>
<oracle-xsl-mapper:target type="WSDL">
<oracle-xsl-mapper:schema location="../dbMyCompanyPaymentRequest.wsdl"/>
<oracle-xsl-mapper:rootElement name="XxtgRepReqCustHdrStgCollection" namespace="http://xmlns.oracle.com/pcbpel/adapter/db/top/dbMyCompanyPaymentRequest"/>
</oracle-xsl-mapper:target>
</oracle-xsl-mapper:mapTargets>
<!--GENERATED BY ORACLE XSL MAPPER 12.2.1.0.0(XSLT Build 151013.0700.0085) AT [TUE NOV 16 17:31:43 SGT 2021].-->
</oracle-xsl-mapper:schema>
<!--User Editing allowed BELOW this line - DO NOT DELETE THIS LINE-->
<xsl:template match="/">
<tns:XxtgRepReqCustHdrStgCollection>
<xsl:for-each select="">
<tns:XxtgRepReqCustHdrStg>
<tns:paymentId/>
<tns:paymentNum>
<xsl:value-of select="/ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:ORDER_NUM"/>
</tns:paymentNum>
<tns:customerType/>
<tns:custFirstName>
<xsl:value-of select="/ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:CustomerData/ns0:FIRST_NAME"/>
</tns:custFirstName>
<tns:custLastName>
<xsl:value-of select="/ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:CustomerData/ns0:LAST_NAME"/>
</tns:custLastName>
<tns:custFullName xsi:nil="">
<xsl:value-of select="concat (/ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:CustomerData/ns0:LAST_NAME, /ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:CustomerData/ns0:FIRST_NAME )"/>
</tns:custFullName>
<tns:primaryEmail>
<xsl:value-of select="/ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:CustomerData/ns0:EMAIL_ADDRESS"/>
</tns:primaryEmail>
<tns:billAddress1>
<xsl:value-of select="/ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:CustomerData/ns0:BILL_ADR_L1"/>
</tns:billAddress1>
<tns:billAddress2>
<xsl:value-of select="/ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:CustomerData/ns0:BILL_ADR_L2"/>
</tns:billAddress2>
<tns:billCity>
<xsl:value-of select="/ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:CustomerData/ns0:BILL_ADR_CITY"/>
</tns:billCity>
<tns:billState>
<xsl:value-of select="/ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:CustomerData/ns0:BILL_ADR_STATE"/>
</tns:billState>
<tns:billZip>
<xsl:value-of select="/ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:CustomerData/ns0:BILL_ADR_ZIP"/>
</tns:billZip>
<tns:billCountry>
<xsl:value-of select="/ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:CustomerData/ns0:BILL_ADR_COUNTRY"/>
</tns:billCountry>
<tns:rrPhone>
<xsl:value-of select="/ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:CustomerData/ns0:PHONE"/>
</tns:rrPhone>
<tns:xxtgRepReqCustLinesStgCollection>
<xsl:for-each select="">
<tns:XxtgRepReqCustLinesStg>
<tns:srStatus>
<xsl:value-of select="/ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:PaymentData/ns0:Payment/ns0:STATUS_CODE"/>
</tns:srStatus>
<tns:modelInfo>
<xsl:value-of select="/ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:PaymentData/ns0:Payment/ns0:MODEL"/>
</tns:modelInfo>
<tns:itemNum>
<xsl:value-of select="/ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:PaymentData/ns0:Payment/ns0:STYLE_NO"/>
</tns:itemNum>
<tns:ownerComments>
<xsl:value-of select="/ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:PaymentData/ns0:Payment/ns0:PAYMENT_DESCRIPTION"/>
</tns:ownerComments>
<tns:creationDate>
<xsl:value-of select="/ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:PaymentData/ns0:Payment/ns0:CREATION_DATE"/>
</tns:creationDate>
<tns:createdBy>
<xsl:value-of select="/ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:PaymentData/ns0:Payment/ns0:CREATED_BY"/>
</tns:createdBy>
<tns:lastUpdateDate>
<xsl:value-of select="/ns0:MyCompanyEnvelope/ns0:Message/ns0:PaymentReport/ns0:PaymentData/ns0:Payment/ns0:LAST_UPDATE_DATE"/>
</tns:lastUpdateDate>
</tns:XxtgRepReqCustLinesStg>
</xsl:for-each>
</tns:xxtgRepReqCustLinesStgCollection>
</tns:XxtgRepReqCustHdrStg>
</xsl:for-each>
</tns:XxtgRepReqCustHdrStgCollection>
</xsl:template>
</xsl:stylesheet>
What is the empty string being referred to?
我相信是这样的:
<xsl:for-each select="">
虽然您的错误消息没有指向行号,但这无疑会产生错误。