XSLT - Ошибка доступа к объекту Java при переборе списка - PullRequest
0 голосов
/ 24 апреля 2020

У меня ниже XML полезная нагрузка

<Info>
    <Details>
        <Name>Sherlock Holmes</Name>
        <Address>221b Baker St</Address>
        <City>London</City>
    </Details>  
</Info>

Java POJO, как показано ниже:

package java:com.sample.domain;

public class AResponse {

    private String code;

    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
}

В методе отдельного класса у меня есть ArrayList, заполненный объектом AResponse с кодами

ArrayList: 'aList' передается с объектами со значениями кода, такими как K1, J4, B3

Я хочу создать нижнюю полезную нагрузку, повторяя тег элемента aList и construct

<Info>
    <Results>
        <Code>K1</Code>
        <Code>J4</Code>
        <Code>B3</Code>
    </Results>
    <Details>
        <Name>Sherlock Holmes</Name>
        <Address>221b Baker St</Address>
        <City>London</City>
    </Details>  
</Info>

Я попробовал приведенный ниже XSLT, но при запуске получаю сообщение об ошибке: XsltErrorListener: Неустранимая ошибка при разборе файла XSLT: Не удается найти функцию с 1 аргументом с именем Q {java: com.sample.domain. AResponse} Получить код (). Вызов внешних функций отключен;

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:ns0="http://www.openuri.org/mySchema" xmlns:list="java.util.List" 
xmlns:a="java:com.sample.domain.AResponse">

    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no" />
    <xsl:strip-space elements="*" />

    <xsl:template match="/|@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()" />
        </xsl:copy>
    </xsl:template>

    <xsl:param name="aList" />

     <xsl:template match="Info"> 
        <xsl:element namespace="http://www.openuri.org/mySchema" name="Results">
            <xsl:for-each select="$aList">
            <xsl:variable name="aResp" select="." />
            <xsl:element namespace="http://www.openuri.org/mySchema" name="Code">
                 <xsl:value-of select="a:getCode($aResp)" />                
            </xsl:element> 
            </xsl:for-each>  
        </xsl:element>
        <xsl:copy-of select="." />  
    </xsl:template>

</xsl:stylesheet>

Заранее спасибо!

1 Ответ

0 голосов
/ 25 апреля 2020

Сообщение об ошибке выглядит так, как будто это Saxon, и в сообщении говорится, что вызовы внешних функций были отключены Итак, нам нужно увидеть, как вы вызываете преобразование. Вызовы внешних функций по умолчанию не отключены, поэтому это должно быть то, что вы делаете в вызове.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...