我们使用 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();
可以吗,还是有可能更正确的方法?