esb 및 activemq를 통해 json 요청을 보내는 데 문제가 있습니다. 실제로 프록시를 사용하고 있으며 나머지 및 json 콘텐츠로 프록시를 호출합니다. 내 통합 흐름은 다음과 같습니다. 프록시 (우편 배달부 포함)를 호출하고 프록시가 jms 메시지 저장소에 요청 (json 콘텐츠 포함)을 보낸 다음 메시지 저장소에서 메시지를 사용하여 메시지를 전송하도록 예약 된 전달 메시지 프로세서를 정의했습니다. 정의 된 엔드 포인트 (.net 웹 API). 하지만 문제는 숫자가있는 문자열이 자동으로 정수 요소로 변환된다는 것입니다. "age": 100 (문자열 "age": "100"), 또 다른 문제는 json의 단일 요소 배열이 json의 문자열 속성으로 변경된다는 것입니다. "list": [ "salam"] "list": "salam"으로 변경,질문 , 내 axis2.xml 파일을 업데이트하고 그가 말한 것처럼 JsonStreamFormatter 및 JsonStreamBuilder를 추가했지만 아무 일도 일어나지 않았습니다.
내 프록시는 다음과 같습니다.
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="myProxy"
transports="https,http"
statistics="disable"
trace="disable"
startOnLoad="true">
<target>
<inSequence>
<log level="full"/>
<property name="FORCE_SC_ACCEPTED" value="true" scope="axis2"/>
<property name="OUT_ONLY" value="true"/>
<property name="messageType" value="application/json" scope="axis2"/>
<store messageStore="myProxyMS"/>
</inSequence>
</target>
<description/>
</proxy>
그리고 내 jms 메시지 저장소 :
<messageStore name="myProxyMS" class="org.apache.synapse.message.store.impl.jms.JmsStore" xmlns="http://ws.apache.org/ns/synapse">
<parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
<parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
<parameter name="store.jms.username">admin</parameter>
<parameter name="store.jms.password">admin</parameter>
<parameter name="store.jms.JMSSpecVersion">1.1</parameter>
<parameter name="store.producer.guaranteed.delivery.enable">false</parameter>
<parameter name="store.failover.message.store.name">InfoGetMobileIndMS</parameter>
</messageStore>
및 예약 된 전달 메시지 프로세서 :
<messageProcessor name="myProxyMP" class="org.apache.synapse.message.processor.impl.forwarder.ScheduledMessageForwardingProcessor" targetEndpoint="aspnet" messageStore="myProxyMS" xmlns="http://ws.apache.org/ns/synapse">
<parameter name="interval">1000</parameter>
<parameter name="client.retry.interval">1000</parameter>
<parameter name="max.delivery.attempts">4</parameter>
<parameter name="is.active">true</parameter>
<parameter name="max.delivery.drop">Enabled</parameter>
<parameter name="member.count">1</parameter>
</messageProcessor>
Postman json 요청 :
{
"name" : "farzam",
"lastname" : "vatanzadeh",
"age" : "1000",
"nested" : {
"id" : "cd12334dasc",
"group" : "asd",
"list" : ["salam"]
}
}
그리고 내 .NET API
[HttpPost]
[Route("proxy")]
[Test]
public HttpResponseMessage Proxy(TempViewModel model)
{
return Request.CreateResponse(HttpStatusCode.Accepted);
}
public class TempViewModel
{
public string name { get; set; }
public string lastname { get; set; }
public string age { get; set; }
public Nested nested { get; set; }
}
public class Nested
{
public string id { get; set; }
public string group { get; set; }
public List<string> list { get; set; }
}
메시지 프로세서에서 내 API로 보내는 http 게시물 요청을 포착하여 콘텐츠를 열기 위해 actionFilter 속성을 정의했습니다. 내 Json 요청은 다음과 같습니다.
{
"name":"farzam",
"lastname":"vatanzadeh",
"age":1000,
"nested":{
"id":"cd12334dasc",
"group":"asd",
"list":"salam"
}
}
이 문제로 10 일 이상 고생하고 있습니다. WSO2 엔지니어가 문제 해결을 도와 주면 정말 감사하겠습니다.
이는 ESB 내부에서 사용되는 STAXON 메시지 포맷터로 인해 발생합니다. 어쨌든 나는 이것이 샘플링 메시지 프로세서에서 잘 작동한다는 주장을 믿을 수 없습니다. 전달 및 샘플링 메시지 프로세서 모두 동일한 포맷터를 사용하기 때문입니다. 메시지 형식을 지정할 때 목록에 하나의 요소가 있으면 하나의 요소로 표시됩니다. 그러나 목록에 여러 요소가있는 경우 목록으로 표시됩니다. 이를 위해 우리는 프로덕션 고객에게 패치를 발행했습니다. 안타깝게도 이와 같은 공개 포럼에서는 패치를 발행 할 수 없습니다. 이와 같은 해결 방법이 필요한 경우 WSO2에서 프로덕션 지원을 받으십시오.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다