有人可以帮我修复此ESB代码吗?

时间:2019-08-19 08:18:59

标签: api wso2 esb api-manager

在下面遇到此错误消息:

try (BufferedReader in = new BufferedReader(new InputStreamReader (
        new FileInputStream(inFile), Charset.forName("Shift_JIS")))) {

    try (BufferedWriter out = new BufferedWriter(new OutputStreamWriter (
            new FileOutputStream(outFile), StandardCharsets.UTF_8))) {

        IOUtils.copy(in, out);
    }
}

以下是我的确切代码,致电

时遇到问题
org.apache.commons.httpclient.URIException: Invalid query
    at org.apache.commons.httpclient.URI.parseUriReference(URI.java:2049)
    at org.apache.commons.httpclient.URI.<init>(URI.java:147)

这是我的EP供参考

<?xml version="1.0" encoding="UTF-8"?>
<api context="/test_api" name="rest" xmlns="http://ws.apache.org/ns/synapse">
    <resource methods="GET" uri-template="/hello?name={namVal}">
        <inSequence>

            <property name="SYSTEM" expression="$url:name"/>
            <property name="uri.var.name" expression="$ctx:SYSTEM"/>

            <call blocking="true">
                <endpoint key="hello_EP"/>
            </call>
            <payloadFactory media-type="xml">
                .....
            </payloadFactory>
            <respond />
        </inSequence>
        <outSequence />
        <faultSequence />
    </resource>
</api>

2 个答案:

答案 0 :(得分:0)

端点中的查询参数为{uri.var.fname},但属性名称为uri.var.name。因此,将属性名称更改为uri.var.fname

这可以直接由单个属性完成,而不必具有以下两个属性,

<property name="uri.var.fname" expression="$url:name"/>

答案 1 :(得分:0)

我发布的问题已于昨天修复。要解决此问题,我需要将uri-template更改为url-mapping。

现在这是我的更新代码:

端点:

<?xml version="1.0" encoding="UTF-8"?>
<endpoint name="hello_EP" xmlns="http://ws.apache.org/ns/synapse">
    <address uri="http://xxxxxxxxxxxxxxxxxx:12345/SpringRest/"/>
</endpoint>

API代码。

<?xml version="1.0" encoding="UTF-8"?>
<api context="/temp_api" name="springRest" xmlns="http://ws.apache.org/ns/synapse">
    <resource methods="GET" url-mapping="/hello">
        <inSequence>
            <!-- URL Parameters -->
            <property expression="$url:name" name="SYSTEM" scope="default" type="STRING"/>
            <!-- Logs -->
            <log level="custom">
                <property expression="$ctx:SYSTEM" name="value-system"/>
            </log>
            <!-- URL param value passed to endpoint param -->
            <property expression="$ctx:SYSTEM" name="uri.var.fname" scope="default" type="STRING"/>
            <!-- Call endpoint -->
            <call blocking="true">
                <endpoint key="hello_EP"/>
            </call>
            <payloadFactory media-type="xml">
               ..
               ..
            </payloadFactory>
            <respond/>
        </inSequence>
        <outSequence/>
        <faultSequence/>
    </resource>
</api>

输出:

<body xmlns="http://ws.apache.org/ns/synapse">
                        {
                        "id": 1,
                        "content": "Hello, world!"
                        }
                    </body>