Я использую XSLT 1.0 и использую инструмент jdeveloper для написания xslt. Я должен преобразовать выходные данные и несколько элементов из исходного запроса в окончательный ответ.
Поэтому я создал xslt, используя первичный источник в качестве OutputParameters и определив глобальный параметр запроса ввода.
`
<oracle-xsl-mapper:schema>
<!--SPECIFICATION OF MAP SOURCES AND TARGETS, DO NOT MODIFY.-->
<oracle-xsl-mapper:mapSources>
<oracle-xsl-mapper:source type="XSD">
<oracle-xsl-mapper:schema location="../Schema/APPS.xsd"/>
<oracle-xsl-mapper:rootElement name="OutputParameters"
namespace="http://xmlns.oracle.com/****/"/>
</oracle-xsl-mapper:source>
<oracle-xsl-mapper:source type="XSD">
<oracle-xsl-mapper:schema location="../Schema/ManageAsset.xsd"/>
<oracle-xsl-mapper:rootElement name="GetAssetRequest" namespace="http://*****.com/*****"/>
<oracle-xsl-mapper:param name="GetAssetRequest"/>
</oracle-xsl-mapper:source>
</oracle-xsl-mapper:mapSources>
<oracle-xsl-mapper:mapTargets>
<oracle-xsl-mapper:target type="XSD">
<oracle-xsl-mapper:schema location="../Schema/ManageAsset.xsd"/>
<oracle-xsl-mapper:rootElement name="GetAssetResponseMsg" namespace="http://****.com/*****"/>
</oracle-xsl-mapper:target>
</oracle-xsl-mapper:mapTargets>
<!--GENERATED BY ORACLE XSL MAPPER 12.1.3.0.0(XSLT Build 140529.0700.0211) AT [WED JUL 03 11:03:10 EDT 2019].-->
</oracle-xsl-mapper:schema>`
<xsl:param name="GetAssetRequest"/>
<xsl:template match="/">
<ns1:GetAssetResponseMsg>
<ns1:Response>
<ns1:ExecutionResult>
<ns1:successIndicator>
<xsl:value-of select="/ns0:OutputParameters/ns0:X_RETURN_STATUS"/>
</ns1:successIndicator>
</ns1:ExecutionResult>
</ns1:Response>
<ns1:GetAssetRequest>
<ns1:GetAssetInput>
<ns1:serialNumber>
<xsl:value-of select="$GetAssetRequest/ns1:GetAssetRequest/ns1:GetAssetInput/ns1:serialNumber"/>
</ns1:serialNumber>
<ns1:assetNumber>
<xsl:value-of select="$GetAssetRequest/ns1:GetAssetRequest/ns1:GetAssetInput/ns1:assetNumber"/>
</ns1:assetNumber>
<ns1:assetBarcode>
<xsl:value-of select="$GetAssetRequest/ns1:GetAssetRequest/ns1:GetAssetInput/ns1:assetBarcode"/>
</ns1:assetBarcode>
<ns1:organizationCode>
<xsl:value-of select="$GetAssetRequest/ns1:GetAssetRequest/ns1:GetAssetInput/ns1:organizationCode"/>
</ns1:organizationCode>
</ns1:GetAssetInput>
</ns1:GetAssetRequest>
</ns1:GetAssetResponseMsg>
Пример запроса:
`<?xml version="1.0" encoding="UTF-8" ?>
<OutputParameters xmlns="http://xmlns.oracle.com/*****">
<X_RETURN_STATUS>X_RETURN_STATUS98</X_RETURN_STATUS>
<X_MSG>X_MSG99</X_MSG>
</OutputParameters>`
`<GetAssetRequest xmlns="http://****.com/****">
<GetAssetInput>
<serialNumber>999</serialNumber>
<assetNumber>111</assetNumber>
<assetBarcode>222</assetBarcode>
<organizationCode>006</organizationCode>
</GetAssetInput>
</GetAssetRequest>`
Ожидаемый результат:
`<ns1:GetAssetResponseMsg xmlns:ns1="http://*****.com/****" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ns1:Response>
<ns1:ExecutionResult>
<ns1:successIndicator>X_RETURN_STATUS98</ns1:successIndicator>
</ns1:ExecutionResult>
</ns1:Response>
<ns1:GetAssetRequest>
<ns1:GetAssetInput>
<ns1:serialNumber>999</ns1:serialNumber>
<ns1:assetNumber>111</ns1:assetNumber>
<ns1:assetBarcode>222</ns1:assetBarcode>
<ns1:organizationCode>006</ns1:organizationCode>
</ns1:GetAssetInput>
</ns1:GetAssetRequest>
</ns1:GetAssetResponseMsg>`
Когда я тестирую в XSLT в jdeveloper, он работает нормально, и я получаю желаемый результат
Но когда я тестирую на консоли OSB с подобными полезными нагрузками, я получаю ошибку ниже. Не уверен, что я делаю не так.
Ошибка выполнения преобразования XSLT: XML-22900: (Неустранимая ошибка) Произошла внутренняя ошибка.
Я думаю, что есть какая-то проблема с тем, как я преобразовываю или передаю GetAssetRequest.
Ниже показано, как я присваиваю значения файлу преобразования из OSB:
Bind Input
Входной документ: $ body / ns0: OutputParameters
Переменные связывания
GetAssetRequest $ GetAssetRequest
Заранее спасибо