2014-12-05 7 views
0

SOAP에서 REST 프록시로 Apigee REST를 사용하고 있습니다.Apigee - WSDL 호출에서 필드를 제외하는 방법

WSDL 프록시를 만들고 배포 한 후. SOAP 종점에 보낼 수있는 모든 매개 변수가 표시됩니다. 그것을 param1, param2, param3이라고 부르겠습니다. 모두 선택 사항입니다. 그러나 그것의 유효성 검사는 [0-9A-Fa-f] {8}입니다. 따라서 비어 있지 않은 경우 각 매개 변수는 8 문자 길이 여야합니다.

내가 가지고있는 문제는 param2가 null 일 때입니다. 프록시가 여전히 유효성 검사 오류를 일으키는 요청을 포함하는 몇 가지 이유가 있습니다.

아무도 내가 이것을 고칠 수있는 방법을 알고 있습니까? 나는 기본적으로 이것을 원한다. http://xxx.apigee.com/myrestendpoint?param1=xxx&param3=xxx

soap에는 param2가 포함되지 않고 param1과 param3 만 전송됩니다.

답변

0

위에서 설명한 내 문제를 해결하기 위해 Json의 접근 방식을 XML에 적용했습니다. 기본적으로 내가 통과 한 json에서 XML을 생성하고 변환 된 텍스트를 사용하도록 BuildSoap을 수정합니다.

{School : { 
    teachers : { teacher: [ 
    {id:123}, {id:456} 
    ]} 
} 

<School> 
    <teachers> 
    <teacher> 
     <id>123</id> 
    </teacher> 
    <teacher> 
     <id>456</id> 
    </teacher> 
    </teachers> 
</school> 

가 내가 추가 할 것입니다 그 일이 내 BuildSoap

...<soap:envelop><soap:body>{xmlFromJson}</soap:body></soap:envelop> 
0

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message"> 
    <DisplayName>Assign Message</DisplayName> 
    <FaultRules/> 
    <Properties/> 
    <Remove> 
     <QueryParams/>  
    </Remove> 
    <Add> 
     <QueryParams> 
      <QueryParam name="param1">{request.queryparam.param1}</QueryParam> 
      <QueryParam name="param3">{request.queryparam.param3}</QueryParam> 
     </QueryParams> 
    </Add> 
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> 
    <AssignTo createNew="false" transport="http" type="request"/> 
</AssignMessage> 

제거 제거 블록은 모든 쿼리 매개 변수를 제거하고 다음 추가 당신은 당신이 원하는 바로 사람에 다시 넣을 수 있도록 것이다 AssignMessage 정책 요청을 다시 작성

.

+0

합니다. 런타임시 null 인 쿼리 매개 변수를 제거하려고합니다. 따라서 필자의 예에서는 param2가 null이지만 누군가 param1,2,3을 전달할 수 있습니다. 누군가 param1을 통과 할 수 있습니다. 그래서 null 매개 변수를 제거하는 무언가가 필요합니다. – Churk

+0

그래서 param3을 param2로 다시 작성해야합니까? –

+0

아니요. 모두 함께 제거해야합니다. 위의 논리를 가지고 모든 queryParmas를 제거한 다음 모든 request.queryparam에 대해 null이 아니면 그렇지 않으면 param을 언급하지 마십시오. – Churk

1

나는 params에 대해이 작업을 수행하지 않았지만 SOAP 메시지의 선택적 필드에 대해 수행했습니다. 제 경우에는 백엔드 WSDL을위한 SOAP XML 메시지로 변환 될 JSON 메시지를 게시하고 있습니다. SOAP 메시지에는 비어있을 수없는 선택적 필드가 있습니다 (예 : SOAP 메시지를 작성하는 내 XSLT에서 필드가 존재하는지 확인하고 그렇지 않으면 채우지 않습니다). 예를 들어

:

<xsl:if test="/task/comments"><comments_txt><value><xsl:value-of select="/task/comments"/></value></comments_txt></xsl:if>

귀하의 SOAP 메시지가 PARAMS로 PARAMS 전달되지 않습니다, 오히려 그들은 SOAP XML 메시지로 변환 될 것이다. 어쩌면 메시지에서 XSLT를 실행하여 누락 된 매개 변수에서 나온 빈 요소를 제거 할 수 있습니다.

미안하지만 구체적 답변이 없지만 도움이 될 수 있습니다.

+0

이것은 Json의 Soap Envelop 기반에서 XSLT를 사용해야한다고 생각한 것입니다. Apigee가 어떻게 이런 것들을 연결하는지 알아 내야합니다. Apigee가 자동으로 수행하는 도구에 Apigee가있는 것이 있었으면 좋겠지 만 답변과 같은 기능은없는 것 같습니다. – Churk

관련 문제