通过SOAP在Polarion创建Workitem报ClassCastException问题咨询
我正在尝试通过SOAP Web Services在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元素,即使对应的取值为空?
不需要传递所有元素,仅需传递必填字段对应的元素即可,Polarion非必填字段为空时可以直接省略。你当前返回的ClassCastException报错,核心原因是createWorkItem接口要求工作项的title字段为必填项,你的现有请求中缺少title节点导致服务端类型转换异常。如果是允许为空的非必填字段,不需要显式传递空值元素,直接省略即可。不清楚'Unresolvable'属性的作用,也没有找到相关说明文档。
Unresolvable是Polarion对象的内置标记属性,不需要用户在请求中主动设置。当请求中关联的对象(比如指定的经办人、关联的其他工作项)在系统中不存在、或者当前会话账号没有权限访问该对象时,Polarion会自动将该关联对象标记为Unresolvable,正常请求时直接忽略该属性即可。什么场景下需要指定subterra uri,什么场景下可以省略该参数?
subterra uri是Polarion内部用于唯一标识对象的资源定位符,仅当你需要修改已存在的Polarion对象、或者关联系统中已存在的其他对象时才需要传递该参数。如果是新建对象(比如当前创建新工作项的场景),不需要传递subterra uri,直接传递对应对象的id属性即可。即使我指定了该uri,也会抛出另一个错误,提示该URI不是normId。
normId是Polarion要求的标准化subterra uri格式,统一格式为subterra:data-service:objects:/default/${项目ID}/${对象类型}${对象ID},传递的URI不符合该格式要求就会触发该错误。你当前是新建工作项场景,不需要传递该参数,直接删除请求中的subterra uri字段即可避免该报错。
内容的提问来源于stack exchange,提问作者Thomas Scheibelhofer

