spyne を使用して単純なサービスを構築しましたが、1 つの問題があります。メソッドの入力パラメーターが複雑な型にラップされます。
class JiraAdapter(ServiceBase):
@srpc(Unicode, Unicode, Unicode, _returns=String)
def CreateJiraIssueWithBase64Attachment(summary, base64attachment, attachment_filename):
status = Status
try:
newkey = jira_client.createWithBase64Attachment(summary, base64attachment.decode('string-escape'), attachment_filename)
status.Code = StatusCodes.IssueCreated
status.Message = unicode(newkey)
except Exception as e:
status.Code = StatusCodes.FailedToCreateIssue
status.Message = u'Internal Exception: %s' % e.message
return status.__str__()
application = Application([JiraAdapter],
tns='JiraAdapter',
in_protocol=Soap11(),
out_protocol=Soap11()
)
結果は次の WSDL になります (相対ビットのみを処理します)。
<wsdl:portType name="Application">
<wsdl:operation name="CreateJiraIssueWithBase64Attachment" parameterOrder="CreateJiraIssueWithBase64Attachment">
<wsdl:input name="CreateJiraIssueWithBase64Attachment" message="tns:CreateJiraIssueWithBase64Attachment"/>
<wsdl:output name="CreateJiraIssueWithBase64AttachmentResponse" message="tns:CreateJiraIssueWithBase64AttachmentResponse"/>
</wsdl:operation>
</wsdl:portType>
....
<xs:complexType name="CreateJiraIssueWithBase64Attachment">
<xs:sequence>
<xs:element name="summary" type="xs:string" minOccurs="0" nillable="true"/>
<xs:element name="base64attachment" type="xs:string" minOccurs="0" nillable="true"/>
<xs:element name="attachment_filename" type="xs:string" minOccurs="0" nillable="true"/>
</xs:sequence>
</xs:complexType>
パラメータのシーケンスを必要とする方法でspyneビルドwsdlを作成する方法はありますか? クライアント アプリケーションは VBA で記述されており、複雑な型パラメーターを送信する方法を知っているのは神だけです。