0

我们使用 wso2 微服务引擎作为 WSO2 EI 和 DB 之间的中间件。目标链MQ->WSO EI->msf4j->DB。传输的 DTO - 格式化的 xml 字符串,基本上不应该在 msf4j 层之前解析。所以,这一切都只是字符串。有时这是一个大字符串。

我们的代码

@Path("/accountdao")
public class AccountDaoService implements Microservice {

@POST
@Path("/getbyparam")
@Produces(MediaType.TEXT_PLAIN)
public String getAllAccounts(@QueryParam("commandText") String commandText) {

之前我们在 GET 的风格调用中对其进行了测试,我的意思是 smth like

URL url = new URL(serverURL + requestURL + "/?commandText=" + 
URLEncoder.encode(request,"UTF-8"));

因为在所有其他样式中,假设使用来自 commons 的 HttpClient,我们没有在 commandText 中接收数据。

而且我发现,我不知道如何使用 SoapUI 传递大数据或只是清除 java 客户端..

使用小文本块(如 200-300 个字符)都可以,但是使用 6k 长度这已经是问题了。

是否可以在 msf4j 中处理大字符串,或者我们应该使用它?

谢谢。

ps 也许我们应该使用@FormParam & multipart/form-data?

更新 1

 <payloadFactory media-type="xml">
                <format>
                    <uri.var.commandText xmlns="">$1</uri.var.commandText>
                </format>
                <args>
                    <arg evaluator="xml" expression="get-property('uri.var.commandText')"/>
                </args>
            </payloadFactory>
            <call blocking="true" description="">
                <endpoint key="microserviceEP"/>
            </call>

和微服务代码

    @POST
    @Path("/getclientcontract")
    @Produces(MediaType.TEXT_PLAIN)
    public String getClientContract(@Context Request request) {

List<ByteBuffer> fullMessageBody = request.getFullMessageBody();
        StringBuilder sb = new StringBuilder();
        for (ByteBuffer byteBuffer : fullMessageBody) {
            sb.append(StandardCharsets.UTF_8.decode(byteBuffer).toString());
        }

        String commandText = sb.toString();

可以吗,还是有可能更正确的方法?

4

0 回答 0