2012-07-19 2 views
2

나는 PHP NuSoap 구현에서 데이터를 검색하고있어, 그것은 다음과 같은 데이터를 반환하는 것 : 배열을 처리하기 위해 Axis2를 얻으려면 어떻게해야합니까?

<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"> 

<SOAP-ENV:Body> 

<ns1:getHashCodeAllTablesResponse xmlns:ns1="urn:getSchemaForRhythms"> 

<return xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType=":[121]"> 

<item xsi:type="xsd:"> 

<md5Hash xsi:type="xsd:string">e294967afe9834bf8477252ac0c3686e</md5Hash> 

<tableName xsi:type="xsd:string">SYSCONGLOMERATES</tableName> 

<isView xsi:type="xsd:string">false</isView> 

<viewDefinition xsi:type="xsd:string">null</viewDefinition> 

</item> 

내가이 문제라고 생각합니다 : <return xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType=":[121]">

나는 서비스에서 내 Axis2는 비누 클라이언트를 가리키면

여기 org.apache.axis2.AxisFault: org.apache.axis2.databinding.ADBException: Unsupported type http://schemas.xmlsoap.org/soap/encoding/ Array

내가 할 노력하고있어의 정말 간단한 자바 예제 :

,369,이 오류가 발생합니다
public static void main(String[] args) { 
    // TODO code application logic here 
    try{ 
     GetSchemaForRhythmsStub stub = new GetSchemaForRhythmsStub(null,"http://test.test.com/sqlSchemaService/schemaBuilder.php"); 
     GetSchemaForRhythmsStub.GetHashCodeAllTablesE response2= new GetSchemaForRhythmsStub.GetHashCodeAllTablesE(); 
     stub.getHashCodeAllTables(response2); 
    }catch(Exception ex) 
    { 
     System.out.println(ex.toString()); 

    } 
} 

배열 데이터 유형 및 축과 관련된 설명서를 찾을 수 없습니다. 내가 놓친 게 있니?

감사합니다,

답변

5

는 당신이 놓치고있는 것은 SOAP 인코딩 배열 형식이 오래된 학교는 (그들이 XML 스키마를 따라 오기 전에 사용하는 데 사용되는 즉 무엇을) 정말이다, 그리고 Axis2는 그것을 좋아하지 않는다. ADB (기본값)에서 XMLBeans로 데이터 바인딩을 전환 해 볼 수 있습니다. 이 작업을 수행하는 방법은 WSDL을 구문 분석하는 방법에 따라 다릅니다. 여기 내가 찾은 몇 참조입니다 : 일반적으로

SOAP encoding and Axis2

Axis2's wsdl2java fails on RPC/Encoded style web services

, 당신이 무슨 일을하는지에 대한 정보를 찾기 위해 "비누 인코딩 배열 축 2"를 찾습니다.

+0

감사에서 생성됩니다, 나는 그 링크를 확인합니다. 이 시점에서 배열을 사용하지 않기 위해 제 할당 코드를 변경하는 것이 더 간단할까요? 나는 PHP가 내 약한 언어이기 때문에 그것을 피하기를 바랐다.하지만 PHP를 제대로 처리하지 못한다면 나는 그 언어를 사용하는 것을 싫어할 것이다. – kevingreen

+1

PHP는 제 첫 번째 언어도 아니지만, NuSOAP이 더 나은 WSDL을 만드는 방법을 알아내는 데 시간을 투자 할 것입니다. 특히 이것이 서비스를 소비 할 유일한 클라이언트가 아닌 경우에 더욱 그렇습니다. – davidfmatheson

+0

기사를 주셔서 감사합니다. 결국 배열 대신 일반 XML을 추출하기 위해 nuSoap 클라이언트를 다시 작성했습니다. Axis2를 작동 시키려면 이제 꺼야합니다. – kevingreen

0

동일한 문제가 발생했습니다. 생성 된 코드에는 배열을 나타내는 XMLBean에 set 메소드가 없습니다. 이 문제를 해결하기 위해 생성 된 클래스에서 직접 XMLBean API를 사용했습니다.

다음 코드 스 니펫은 생성 된 배열 클래스에 요소를 추가하는 방법을 보여줍니다. 제 경우에는 두 개의 값을 포함하는 문자열 배열을 반환해야했습니다.

ArrayOfXsdString strArray = syncResponse.addNewProcessSyncReturn(); 

      /* set the size of the array */ 
    strArray.setArrayType("soapenc:string[2]"); 

      /* get the XMLCursor object and go to the end of the XML represented by this bean */ 
    XmlCursor cur = strArray.newCursor(); 
    cur.toEndToken(); 

      /* processSyncReturn is the XML element name of the array */   
    cur.toChild("processSyncReturn"); 
    cur.insertElementWithText("processSyncReturn","this is array element 1"); 
    cur.insertElementWithText("processSyncReturn","this is array element 2"); 

이 다음은 응답 SOAP 메시지

<processSyncReturn soapenc:arrayType="soapenc:string[2]"> 
<processSyncReturn>this is array element 1</processSyncReturn> 
<processSyncReturn>this is array element 2</processSyncReturn> 
</processSyncReturn> 

후세인

http://nsinfra.blogspot.in