IBM 大型机采用 IBM-37 图表集编码格式为 UTF-8,以便在 springboot 应用程序中理解

问题描述 投票:0回答:1

嗨,你好吗?我正在尝试转换 xml raw 消息来自 IBM 大型机,采用 IBM-37 图表集编码格式为 UTF-8,以便在 springboot 应用程序中理解。 知道怎么做吗?我正在使用 Feign 的 http 请求到 Apache 的 HttpClient 5。

public interface SoapClient {

   
    @RequestLine("POST")
    @Headers({"SOAPAction: operationSaveReq", "Content-Type: text/xml;charset=UTF-8",
            "Accept: text/xml"})
    String operationSaveReq(String soapBody);


}



 RESoapClient soapClient = Feign.builder()
                .client(new ApacheHttp5Client())
                .target(SoapClient.class, "http://10.10.10.10:8000/B2B/Broker/api/v1");


 String soapResponse = soapClient.operationSaveReq("xml string");  

字符串对象soapResponse返回原始消息,例如:

enter image description here

xml soap openfeign
1个回答
0
投票

这引起了我的兴趣,所以我研究了一下 Feign。事实证明,OkHttp 客户端检测到字符集参数并正确解码有效负载。此处的示例使用 JDK 内置 HTTP 服务器,提供 ibm-37 编码的 XML:

import java.net.InetSocketAddress;
import java.nio.charset.Charset;

import com.sun.net.httpserver.HttpServer;

import feign.Feign;
import feign.okhttp.OkHttpClient;

public class Main {

    public static void main(String[] args) throws Exception {
        
        var server = HttpServer.create(new InetSocketAddress("localhost", 0), 0);
        server.createContext("/", x -> {
            x.getResponseHeaders().add("Content-Type", "text/xml;charset=ibm-37");
            x.sendResponseHeaders(201, 0);
            x.getResponseBody().write("<root version='4711'><sub>data</sub></root>".getBytes(Charset.forName("ibm-37")));
            x.getResponseBody().close();
        });
        
        server.start();
        
        try {
            var url = String.format("http://localhost:%d/", server.getAddress().getPort());
            
            var soapClient = Feign.builder()
                    .client(new OkHttpClient())
                    .target(SoapClient.class, url);
    
    
            var soapResponse = soapClient.operationSaveReq("xml string");
            System.out.println(soapResponse);
        } finally {
            server.stop(0);
        }
    }
}

如果您需要使用 Apache 客户端,您可能必须创建自定义解码器,或者配置 Apache 客户端以支持完整的内容类型信息。

© www.soinside.com 2019 - 2024. All rights reserved.