xml - 通过 SOAP 在 Polarion 中创建工作项
问题描述
我正在尝试通过 SOAP Web 服务在 Polarion 中创建工作项,但是我无法确定需要哪些内容。我正在使用 TrackerWebService WSDL。
示例请求:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:trac="http://ws.polarion.com/TrackerWebService-impl"
xmlns:trac1="http://ws.polarion.com/TrackerWebService-types"
xmlns:proj="http://ws.polarion.com/ProjectWebService-types"
xmlns:typ="http://ws.polarion.com/types">
<soapenv:Header>
<ns1:sessionID soapenv:actor="http://schemas.xmlsoap.org/soap/actor/next"
soapenv:mustUnderstand="0" xmlns:ns1="http://ws.polarion.com/session"
>........sessionId.........</ns1:sessionID>
</soapenv:Header>
<soapenv:Body>
<trac:createWorkItem>
<trac:content>
<trac1:description>
<typ:type>text/html</typ:type>
<typ:content>test</typ:content>
<typ:contentLossy>false</typ:contentLossy>
</trac1:description>
<trac1:project>
<proj:id>....projectId....</proj:id>
</trac1:project>
<trac1:type>
<trac1:id>testcase</trac1:id>
</trac1:type>
</trac:content>
</trac:createWorkItem>
</soapenv:Body>
</soapenv:Envelope>
回应:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<soapenv:Fault>
<faultcode>soapenv:Server.userException</faultcode>
<faultstring>java.lang.ClassCastException</faultstring>
<detail>
<ns1:stackTrace xmlns:ns1="http://xml.apache.org/axis/">java.lang.ClassCastException</ns1:stackTrace>
<ns2:hostname xmlns:ns2="http://xml.apache.org/axis/">...server hostname....</ns2:hostname>
<ns3:isRuntimeException xmlns:ns3="http://xml.apache.org/axis/">true</ns3:isRuntimeException>
</detail>
</soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>
有几点我不确定:
- 我是否需要发送所有 xml 元素,即使它们是空的?
- 我不知道'Unresolvable'属性是什么,我也找不到它的描述
- 何时需要指定 subterra uri 之一,何时可以省略?
- 即使我指定了这样的 uri,它也会抛出另一个错误,说 URI 不是 normId
解决方案
终于在这方面取得了一些进展。回答我自己的问题,希望也回答一些试图做同样事情的可怜的草皮:
我是否需要发送所有 xml 元素,即使它们是空的?
不,只有需要的。需要哪些不容易确定,需要在极化配置中进行检查,即使在那里它也分布在不同的地方。我不知道'Unresolvable'属性是什么,我也找不到它的描述
仍然不知道这个,可能是'nullable'?何时需要指定 subterra uri 之一,何时可以省略?
引用现有项目时,需要指定 subterra uri,这里有一个问题:其中的 $ 符号必须用 $ 转义即使我指定了这样的 uri,它也会抛出另一个错误,说 URI 不是 normId
这是上一个问题的答案,需要转义美元。
这是一个工作示例:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:trac="http://ws.polarion.com/TrackerWebService-impl"
xmlns:trac1="http://ws.polarion.com/TrackerWebService-types"
xmlns:proj="http://ws.polarion.com/ProjectWebService-types"
xmlns:typ="http://ws.polarion.com/types">
<soapenv:Header>
<ns1:sessionID soapenv:actor="http://schemas.xmlsoap.org/soap/actor/next"
soapenv:mustUnderstand="0" xmlns:ns1="http://ws.polarion.com/session"
>...session id ...</ns1:sessionID>
</soapenv:Header>
<soapenv:Body>
<trac:createWorkItem>
<trac:content unresolvable="false">
<!--Optional:-->
<trac1:author uri="subterra:data-service:objects:/default/${User}...username..."
unresolvable="false"/>
<trac1:created>2021-07-20T09:18:29.905Z</trac1:created>
<trac1:priority>
<trac1:id>medium</trac1:id>
</trac1:priority>
<trac1:project
uri="subterra:data-service:objects:/default/...projectid...${Project}...projectid..."
unresolvable="false"/>
<trac1:severity>
<trac1:id>basic</trac1:id>
</trac1:severity>
<trac1:status>
<trac1:id>draft</trac1:id>
</trac1:status>
<trac1:title>Just another test</trac1:title>
<trac1:type>
<trac1:id>testcase</trac1:id>
</trac1:type>
<trac1:updated>2021-07-20T09:18:29.993Z</trac1:updated>
</trac:content>
</trac:createWorkItem>
</soapenv:Body>
</soapenv:Envelope>
推荐阅读
- sql - SQLZOO Q#14 ORDER BY CASE 问题
- rider - Rider,IntelliJ:如何使用 Tab 键将光标放在分号后面
- typescript - 制作复合类型打字稿的地图
- node.js - 允许 express-session 在 iframe 中正常工作
- winforms - Cefsharp Winform 显示图像模糊
- scheme - 了解序列的工作原理
- mongodb - 如何从包含多个项目的项目价格集合中计算最接近的总价格
- azure-devops - TF400324: Azure DevOps 服务不可用
- reactjs - 从获取请求 React Native 中渲染数据
- swift - 对属性使用 getter/setter 使其不会出现在反射(镜像)中