2012-08-06 2 views
2

다른 서비스의 데이터를 전달하는 SoapServer 용 WSDL을 작성해야합니다.무제한 매개 변수가있는 wsdl 조작

<operationName> 
    <parameterHeader></parameterHeader> 
    <parameterData1></parameterData1> 
    <parameterData2></parameterData2> 
    ... 
    <parameterDataN></parameterDataN> 
</operationName> 

이 나는 ​​방법

function operationName(parameterHeader, parameterData1, parameterData2, ... parameterDataN){ 
    ... 
} 

내 동작으로 제공 될 것입니다 얼마나 많은 매개 변수를 알고 불가능을 만들 필요가 있음을 의미합니다 : 나에게 제공 한 데이터는 다음과 같은 구조를 가지고 있습니다.

해결 방법으로, 매개 변수없이 메서드에 대해 WSDL을 만들려고하지만이 메서드 안에는 func_get_args() 함수를 사용하여 모든 매개 변수를 가져옵니다.

나는 여전히 적절한 WSDL을 만들 수 없으며 이것이 가능한지 확실하지 않습니다. 내 웹 서비스에 의해 수신한다

정확한 데이터 (예)입니다 다음

<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://www.w3.org/2005/08/addressing"> 
    <env:Header/> 
    <env:Body> 
     <tns:operationResponse xmlns:tns="http://somedomain.com/demo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
           xmlns="http://anotherdomain.com/anotherdemo"> 
      <tns:ResponseHeader attrName1="data1" attrName2="data2" attrName3="data3" /> 
      <tns:ObjectData> 
       <tns:ElementData ElementAttr1="data1" ElementAttr2="data2" ElementAttr3="data3"/> 
      </tns:ObjectData> 
      <tns:ObjectData> 
       <tns:ElementData ElementAttr1="data21" ElementAttr2="data22" ElementAttr3="data23"/> 
      </tns:ObjectData> 
      <tns:ObjectData> 
       <tns:ElementData ElementAttr1="data31" ElementAttr2="data32" ElementAttr3="data33"/> 
      </tns:ObjectData> 
      <tns:ObjectData> 
       <tns:ElementData ElementAttr1="data41" ElementAttr2="data42" ElementAttr3="data43"/> 
      </tns:ObjectData> 
     </tns:operationResponse> 
    </env:Body> 
</env:Envelope> 

당신에게 어쩌면 어떤 WSDL 같은 종류의 경험이나 데이터의 방법을 제공받을 수있는 구조에 대한 몇 가지 아이디어를 가지고 ?

매개 변수 이름을 고려할 가능성이 있으므로 complexType으로 다른 데이터를 사용할 수 있습니다. 어쩌면 WSDL은 몇 가지 트릭을 제공합니다 ...

+0

WSDL 사양이 이것을 지원하는지 모르겠습니다. 하나의 컬렉션 매개 변수를 갖고 배열을 전달하는 것이 잘못된 이유는 무엇입니까? –

답변

0

마이크처럼 제 첫 번째 방법은 배열 매개 변수를 사용하는 것입니다. 프로 시저에서 무제한 매개 변수를 상상하는 것은 가능하지만, WSDL의 정의가 열거 형임을 확실히 알고 있으므로 매개 변수를 명시 적으로 나열해야합니다. 일부 웹 서비스 구현은 무제한 args를 관리하지 못할 수도 있습니다 (이 경우 요청자 측에서 자신의 문제가 아니라 문제).

+0

예,이 경우에는 배열을 사용하는 것이 좋습니다. 하지만 유감스럽게도 입력 데이터의 형식을 변경할 가능성이 없습니다. – vichaz

+0

잘못 설계된 계약처럼 보입니다. 그것은 <작업 이름 = "operationName">해야 1 2 3 ... Alfabravo

+0

난 그냥 내 게시물을 편집하고 더/덜 정확한 예를 제공합니다. 그러나이 데이터조차 잘못 설계된 경우 PHP에서 SoapServer에 의해이 데이터를 올바르게받을 수 있습니다. – vichaz