2013-05-06 113 views
1

请帮助,我与groovy标记构建器的问题。groovy-wslite markupbuilder在肥皂客户端weired命名空间问题

WORKING对端点MYENDPOINT SOAP请求和行动MYACTION:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:SPECIAL"> 
    <soapenv:Header> 
     <urn:xsdInfo> 
     <urn:schemaLocation>SCHEMALOCATION</urn:schemaLocation> 
     </urn:xsdInfo> 
     <urn:category>Data Tables</urn:category> 
     <urn:userInfo> 
     <urn:sessionId>XXXXX</urn:sessionId> 
     </urn:userInfo> 
    </soapenv:Header> 
    <soapenv:Body> 
     <urn:add> 
     <urn:DataTables urn:table_name="testtable"> 
      <!--Zero or more repetitions:--> 
      <urn:each_record> 
       <urn:s1>Somedinputdata</urn:s1> 
      </urn:each_record> 
     </urn:DataTables> 
     </urn:add> 
    </soapenv:Body> 
</soapenv:Envelope> 

正在尝试与makrup建设者这是wslite SOAP客户端对象内的封闭复制此,不工作(关于向命名空间问题我想:

def bmClient = new SOAPClient('MYENDPOINT') 
    def response = bmClient.send(SOAPAction:'MYACTION') { 
     header{ 
       xsdInfo('xmlns':'urn:soap.bigmachines.com'){ 
        schemaLocation('SCHEMALOCATION') 
       } 
       category('Data Tables') 
       userInfo(){ 
        sessionId('XXXXX') 
       } 
     } 
     body{ 
       add('xmlns':'urn:SPECIAL'){ 
       // PROBLEM IS HERE: should be urn:table_name but then it says urn is not defined as namespace.. 
       DataTables('table_name':'testtable'){ 
        each_record(){ 
         s1('something')    
        } 
       } 
      } 
     } 
    } 
    return response.addResponse.status.message.text() 
}catch(e){ 
    println 'Problem in addToDataTable Session ID: '+e.printStackTrace() 
} 
} 

目前它说:

wslite.soap.SOAPFaultException: soapenv:INIT-ERR - The element category, is required in the header. 

虽然有指定类别... 我只是坚持在这里,有人知道如何创建

<urn:DataTables urn:table_name="testtable"> 
标记关闭正常范围内

,我认为这是问题,因为我有运行quity漂亮的同一逻辑另一web服务,但没有在它...

将是巨大的,如果有人可以提供帮助的,我工作它第二天...

+0

你解决方案完美无缺谢谢sooooo多! – Booyeoo 2013-05-08 16:30:59

回答

3

如果你想的结构完全匹配,你应该定义使用envelopeAttributes信封urn命名空间,并使用它的嵌套项目,像这样:

def response = bmClient.send(SOAPAction:'MYACTION') { 
    envelopeAttributes ('xmlns:urn' : 'urn:SPECIAL') // watch out for brackets here! 
    header{ 
      'urn:xsdInfo'{ 
       'urn:schemaLocation'('SCHEMALOCATION') 
      } 
      'urn:category'('Data Tables') 
      'urn:userInfo' { 
       'urn:sessionId'('XXXXX') 
      } 
    } 
    body{ 
      'urn:add' { 
      'urn:DataTables'('urn:table_name':'testtable'){ 
       'urn:each_record'{ 
        'urn:s1'('something')    
       } 
      } 
     } 
    } 
}