2010-03-30 39 views
5

Tôi có một máy ảnh và tôi đang cố gắng kết nối với nó. Tôi đã cố gắng để gửi nguyên xml và đã tìm thấy rằng điều duy nhất dừng xml suds từ làm việc là một không gian tên phong bì xà phòng không chính xác.Ghi đè lên phong bì xà phòng trong Suds python

Các namespace phong bì là:

xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"

và tôi muốn viết lại nó để:

xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope"

Để thêm một không gian tên trong python Tôi thử mã này:

message = Element('Element_name').addPrefix(p='SOAP-ENC', u='www.w3.org/ENC')

Nhưng khi tôi thêm SOAP-ENV vào không gian tên nó không viết vì nó được mã hóa cứng thành các ràng buộc suds. Có cách nào để ghi đè lên điều này trong suds?

Cảm ơn bạn đã được trợ giúp.

+0

gì loại lỗi nào bạn nhận được? Bạn có thể xây dựng và đăng mã của mình không? – systempuntoout

Trả lời

1

Tôi đã quản lý để làm việc này, phong bì xà phòng được mã hóa cứng thành bindings.py được lưu trữ trong suds.egg được cài đặt trong gói trang web của bạn. Tôi đã thay đổi địa chỉ phong bì SOAP thành http://www.w3.org/2003/05/soap-envelope. Điều này tương thích với máy ảnh của tôi. Tôi đã không thể tìm thấy một lệnh để ghi đè lên phong bì này trong suds vì vậy tôi cứng mã hóa nó vào bindings.py.

Cảm ơn bạn đã giúp đỡ

+0

Để biết cách nhập tiêu đề vào phần mềm kiểm tra câu hỏi trước của tôi. Tôi sẽ đăng mã của mình vì tôi biết ít tài liệu. – chrissygormley

1

Chắc chắn không phải là cách phù hợp để thực hiện. Bạn có thể sử dụng ImportDoctor để ghi đè lên các ràng buộc mặc định của mình. Hãy xem tài liệu cho fixing broken schemas trên trang web của Suds.

Ngoài ra, bạn đang sử dụng phiên bản Python và suds nào?

4

tôi xung quanh nó bằng cách ghi đè biến suds.binding.envns trong bindings mô-đun:

from suds.bindings import binding 
binding.envns=('SOAP-ENV', 'http://www.w3.org/2003/05/soap-envelope') 

Từ đây trở đi, mọi việc suôn sẻ (với dịch vụ của tôi, đó là)

0
from suds.client import Client 
from suds.plugin import MessagePlugin 

WSDL_url = "my_url?wsdl" 

class MyPlugin(MessagePlugin): 
    def marshalled(self, context): 
     #print(str(context.envelope)) 
     context.envelope.nsprefixes['SOAP-ENV']='myText' 

client = Client(WSDL_url, plugins=[MyPlugin()]) 
Các vấn đề liên quan