Поэтому у меня есть XLST для заполнения многих полей в заголовке SOAP. Одно из этих полей нужно вызвать функцию java, чтобы заполнить значение. Параметры java-функции являются параметрами String, но я не знаю, как создавать параметры в виде строки. Я не могу использовать XSLT 2.0, поэтому я не могу объявить параметр как строку.
Любая идея как преобразовать параметры strBS
и strCC
в строку?
Когда я выполняю xsl, то возвращает мне ошибку:
Несовместимые типы
Ниже моя таблица стилей:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:n0="http://soap.sforce.com/schemas/class/serviceReenvioVale"
xmlns:ser="http://soap.sforce.com/schemas/class/serviceReenvioVale"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:javamap="java:dafiti.getloginhandler"
xmlns:func="http://exslt.org/functions"
exclude-result-prefixes="n0">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/>
<xsl:param name="strBS">"BS_DFD_300"</xsl:param>
<xsl:param name="strCC">"CC_RFC_RCV"</xsl:param>
<xsl:param name="container" />
<xsl:template match="/">
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<SessionHeader>
<sessionId>
<xsl:value-of select="javamap:GetHandler($strBS,$strCC, $container)"/>
</sessionId>
</SessionHeader>
</soapenv:Header>
<soapenv:Body>
<ser:ReenviarVale>
<xsl:copy>
<xsl:apply-templates select="n0:ReenviarVale/*"/>
</xsl:copy>
</ser:ReenviarVale>
</soapenv:Body>
</soapenv:Envelope>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{local-name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
Попробуйте использовать функцию string() :
<xsl:value-of select="javamap:GetHandler(string($strBS),
string($strCC),
string($container))"/>
Кроме того, ваши значения strBS
и strCC
содержат кавычки как часть их значения. Это то, что вы хотите? Вы уверены, что не собираетесь определять их так:
<xsl:param name="strBS">BS_DFD_300</xsl:param>
<xsl:param name="strCC">CC_RFC_RCV</xsl:param>
Вам нужно было бы только обернуть значения в кавычках, если бы вы задавали буквальные строковые значения в атрибуте select, например:
<xsl:param name="strBS" select="'BS_DFD_300'"/>
<xsl:param name="strCC" select="'CC_RFC_RCV'"/>