2013-09-02 23 views
16

Tôi đang kết nối với một dịch vụ web với trục/rampart và được yêu cầu loại bỏ các InclusiveNamespaces như prefixList là "" không được phép. Làm thế nào để làm điều đó?Tắt InclusiveNamespaces trong trục/khách hàng rampart

Phần trông giống như

<ds:SignedInfo> 
    <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"> 
     <ec:InclusiveNamespaces xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#" PrefixList="wsa soapenv" /> 
    </ds:CanonicalizationMethod> 
    <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" /> 
    <ds:Reference URI="#Id-289005241"> 
     <ds:Transforms> 
      <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">    
       <ec:InclusiveNamespaces xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#" PrefixList="" /> 
      </ds:Transform> 
     </ds:Transforms> 
     <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />       
     <ds:DigestValue>bla bla bla=</ds:DigestValue> 
    </ds:Reference> 
</ds:SignedInfo> 

Có thể cấu hình trục/thành lũy để không in inclusivenamespace khi nó trống rỗng?

Tôi đang sử dụng trục/đoạn đường nối 1.6.2 và kết nối với dịch vụ .NET

Bất kỳ ý tưởng nào về cách lưu trữ tệp này? Hoặc làm thế nào để làm cho nó render một prefixList không rỗng?

Trả lời

1

Bạn phải thêm trình xử lý tùy chỉnh để lọc thẻ xml không mong muốn.

tùy chỉnh xử lý:

package com.perre; 

     public class InclusiveNamespacesFilter extends AbstractHandler { 

     public InvocationResponse invoke(MessageContext ctx) throws AxisFault { 

      SOAPEnvelope msgEnvelope = ctx.getEnvelope(); 
      SOAPHeader msgHeader = msgEnvelope.getHeader(); 

      Iterator theDescendants = msgHeader.getDescendants(true); 
      while(theDescendants.hasNext()){ 

       Object o = theDescendants.next(); 

       //here, add your code to traverse DOM and get the node to filter 
       //... 
       Node aNode = ele.getElementsByTagName("ec:InclusiveNamespacesFilter").item(0); 
       if(aNode != null){ 
          ele.removeChild(aNode); 
       } 
      } 
      return InvocationResponse.CONTINUE; 
     } 

chỉnh sửa axis2.xml của bạn và tuyên bố xử lý:

<phase name="PostSecurity"> 
     <handler name="FilterHandler" class="com.perre.InclusiveNamespacesFilter"/> 
</phase> 
  • Bạn nên sẵn sàng để đi. Tìm hiểu thêm về trình xử lý tùy chỉnh here.
+0

Cảm ơn, tôi đã giải quyết nó bằng cách sử dụng chế độ khiếu nại không phải WSI. Tôi sẽ cố gắng khi tôi có thời gian. Cảm ơn bạn – Perre

Các vấn đề liên quan