Browse Source

----------------------------------------------------------------------

Modified Files:
 	WSDLTools.py -- Had to change how the default wsa:Action values
           are set up.  Must wait until entire WSDL is loaded, otherwise
           can get into situations where the objects we need to access
           haven't been initialized yet because of the order of WSDL
           information items in the WSDL definition.

 ----------------------------------------------------------------------
main
Joshua Boverhof 20 years ago
parent
commit
c67585624a
1 changed files with 24 additions and 26 deletions
  1. +24
    -26
      WSDLTools.py

+ 24
- 26
WSDLTools.py View File

@@ -429,8 +429,8 @@ class PortType(Element):
docs = GetDocumentation(item) docs = GetDocumentation(item)
msgref = DOM.getAttr(item, 'message') msgref = DOM.getAttr(item, 'message')
message = ParseQName(msgref, item) message = ParseQName(msgref, item)
input = operation.setInput(message, name, docs)
input.setAction(GetWSAActionInput(operation, item))
action = DOM.getAttr(item, 'Action', WSA.ADDRESS, None)
operation.setInput(message, name, docs, action)


item = DOM.getElement(element, 'output', None, None) item = DOM.getElement(element, 'output', None, None)
if item is not None: if item is not None:
@@ -438,16 +438,16 @@ class PortType(Element):
docs = GetDocumentation(item) docs = GetDocumentation(item)
msgref = DOM.getAttr(item, 'message') msgref = DOM.getAttr(item, 'message')
message = ParseQName(msgref, item) message = ParseQName(msgref, item)
output = operation.setOutput(message, name, docs)
output.setAction(GetWSAActionOutput(operation, item))
action = DOM.getAttr(item, 'Action', WSA.ADDRESS, None)
operation.setOutput(message, name, docs, action)


for item in DOM.getElements(element, 'fault', None): for item in DOM.getElements(element, 'fault', None):
name = DOM.getAttr(item, 'name') name = DOM.getAttr(item, 'name')
docs = GetDocumentation(item) docs = GetDocumentation(item)
msgref = DOM.getAttr(item, 'message') msgref = DOM.getAttr(item, 'message')
message = ParseQName(msgref, item) message = ParseQName(msgref, item)
fault = operation.addFault(message, name, docs)
fault.setAction(GetWSAActionFault(operation, item))
action = DOM.getAttr(item, 'Action', WSA.ADDRESS, None)
operation.addFault(message, name, docs, action)




@@ -464,7 +464,7 @@ class Operation(Element):


def getInputAction(self): def getInputAction(self):
"""wsa:Action attribute""" """wsa:Action attribute"""
return self.input.action
return GetWSAActionInput(self)


def getInputMessage(self): def getInputMessage(self):
if self.input is None: if self.input is None:
@@ -474,7 +474,7 @@ class Operation(Element):


def getOutputAction(self): def getOutputAction(self):
"""wsa:Action attribute""" """wsa:Action attribute"""
return self.output.action
return GetWSAActionOutput(self)


def getOutputMessage(self): def getOutputMessage(self):
if self.output is None: if self.output is None:
@@ -484,39 +484,35 @@ class Operation(Element):


def getFaultAction(self, name): def getFaultAction(self, name):
"""wsa:Action attribute""" """wsa:Action attribute"""
return self.faults[name].action
return GetWSAActionFault(self, name)


def getFaultMessage(self, name): def getFaultMessage(self, name):
wsdl = self.getPortType().getWSDL() wsdl = self.getPortType().getWSDL()
return wsdl.messages[self.faults[name].message] return wsdl.messages[self.faults[name].message]


def addFault(self, message, name, documentation=''):
def addFault(self, message, name, documentation='', action=None):
if self.faults.has_key(name): if self.faults.has_key(name):
raise WSDLError( raise WSDLError(
'Duplicate fault element: %s' % name 'Duplicate fault element: %s' % name
) )
item = MessageRole('fault', message, name, documentation)
item = MessageRole('fault', message, name, documentation, action)
self.faults[name] = item self.faults[name] = item
return item return item


def setInput(self, message, name='', documentation=''):
self.input = MessageRole('input', message, name, documentation)
def setInput(self, message, name='', documentation='', action=None):
self.input = MessageRole('input', message, name, documentation, action)
return self.input return self.input


def setOutput(self, message, name='', documentation=''):
self.output = MessageRole('output', message, name, documentation)
def setOutput(self, message, name='', documentation='', action=None):
self.output = MessageRole('output', message, name, documentation, action)
return self.output return self.output




class MessageRole(Element): class MessageRole(Element):
def __init__(self, type, message, name='', documentation=''):
def __init__(self, type, message, name='', documentation='', action=None):
Element.__init__(self, name, documentation) Element.__init__(self, name, documentation)
self.message = message self.message = message
self.type = type self.type = type
self.action = None

def setAction(self, action):
"""action is a URI, part of WS-Address specification """
self.action = action self.action = action




@@ -1001,17 +997,18 @@ def GetExtensions(element):
return [ item for item in DOM.getElements(element, None, None) return [ item for item in DOM.getElements(element, None, None)
if item.namespaceURI != DOM.NS_WSDL ] if item.namespaceURI != DOM.NS_WSDL ]


def GetWSAActionFault(operation, element):
def GetWSAActionFault(operation, name):
"""Find wsa:Action attribute, and return value or WSA.FAULT """Find wsa:Action attribute, and return value or WSA.FAULT
for the default. for the default.
""" """
attr = DOM.getAttr(element, 'Action', WSA.ADDRESS, None)
attr = operation.faults[name].action
if attr is not None: if attr is not None:
return attr return attr
return WSA.FAULT return WSA.FAULT


def GetWSAActionInput(operation, element):
attr = DOM.getAttr(element, 'Action', WSA.ADDRESS, None)
def GetWSAActionInput(operation):
"""Find wsa:Action attribute, and return value or the default."""
attr = operation.input.action
if attr is not None: if attr is not None:
return attr return attr
targetNamespace = operation.getPortType().getWSDL().targetNamespace targetNamespace = operation.getPortType().getWSDL().targetNamespace
@@ -1021,8 +1018,9 @@ def GetWSAActionInput(operation, element):
return '%s%s/%s' %(targetNamespace, ptName, msgName) return '%s%s/%s' %(targetNamespace, ptName, msgName)
return '%s/%s/%s' %(targetNamespace, ptName, msgName) return '%s/%s/%s' %(targetNamespace, ptName, msgName)


def GetWSAActionOutput(operation, element):
attr = DOM.getAttr(element, 'Action', WSA.ADDRESS, None)
def GetWSAActionOutput(operation):
"""Find wsa:Action attribute, and return value or the default."""
attr = operation.output.action
if attr is not None: if attr is not None:
return attr.value return attr.value
targetNamespace = operation.getPortType().getWSDL().targetNamespace targetNamespace = operation.getPortType().getWSDL().targetNamespace


Loading…
Cancel
Save