使用Webmethods作为客户端向JIRA REST API添加附件

时间:2015-08-06 17:34:39

标签: api rest jira attachment webmethods

我可能不是第一个尝试使用Webmethods Service的JIRA REST API向JIRA添加附件的人。所以希望有人能够提供帮助。

有两个问题,一个是JIRA REST API,两个是Webmethods MIME服务(版本9.8)。

构建addAttachment服务,使用JIRA REST API将json inputStream作为附件添加到JIRA。

在webmethods中使用以下服务,

pub.string:stringtoBytes.
pub.io:bytestoStream.
pub.mime:createMimeData.
pub.mime:addBodyPart.
pub.mime:getEnvelopeStream.
pub.io:streamToString.
pub.client:http.

它产生的Mime Stream,如下所示, (1.问题1,虽然在addBodyPart中,我们将消息头设置为application / json,但它似乎是重写并设置为自己的解释? 2.问题2,虽然边界在标题中设置为mmmm,但Webmethods似乎使用自己的边界值) 请帮忙解决这个问题。如果需要,可以提供屏幕截图。

    Message-ID: <786753280.135.1438880433399.JavaMail.webm@ruudwmia01>
    MIME-Version: 1.0
    Content-type: multipart/form-data
    boundary: mmmm
    name: file
    filename: test.json
            
    ------=_Part_134_59669361.1438880433399
    Message-ID: <902143670.133.1438880433399.JavaMail.webm@ruudwmia01>
    MIME-Version: 1.0
    content-type: text/plain
    content-transfer-encoding: 7bit
    {"self": "http://localhost:8090/jira/rest/api/2.0/status/10000","description": "The issue is currently being worked on.","iconUrl":"http://localhost:8090/jira/images/icons/progress.gif","name": "In Progress","id": "10000","statusCategory":{"self":"http://localhost:8090/jira/rest/api/2.0/statuscategory/1","id": 1, "key":"in-flight","colorName": "yellow","name": "In Progress" }}
            
            
    ------=_Part_134_59669361.1438880433399--

问题2,使用JIRA REST API,上面的mime文档作为输入抛出, 415 HTTP支持CALL中不支持的媒体类型 URL,尝试通过调用JIRA REST API添加附件。

这是一个http客户端POST调用,传入一个mime对象 - 作为流, 传入的mime流如上所述, 获取415,不支持的媒体类型错误消息。 JIRA日志中没有任何内容。

2 个答案:

答案 0 :(得分:2)

尝试通过仅使用以下值设置mimeHeader的输入文档来调用服务“pub.mime:createMimeHeader”:

名称=内容类型 值=多部分/格式的数据;边界= MMM

使用“contenttype”输入字段将“application / json”标头添加到“pub.mime:addBodyPart”服务中。不要在pub.client:http服务中设置标头。

请注意您确实创建了一个多部分消息(至少有两部分),否则整个消息的内容类型将设置为您的mime主体的内容类型,如文档中所定义:

  

contentype字符串可选。此正文部分的Content-Type标头的值。对于单部分消息,此值将覆盖   mimeHeader中的Content-Type值(如果存在)。默认为   文本/无格式。

这样做我得到以下输出:

2015-08-06 22:28:10 CEST [ISP.0090.0001C] --- START tracePipeline 

[8/6/15 10:28 PM] ---
2015-08-06 22:28:10 CEST [ISP.0090.0008C] 0 Message-ID: <7862407.17.1438892890984.JavaMail.Administrator@sagbase>
MIME-Version: 1.0
Content-Type: multipart/form-data; boundary {java.lang.String} = 'mmm

--mmm
content-type: application/json

[
    "serviceName": "wx.interceptor.test.pub.measureRuntimeGraph:tester",
    "stats": {
        "avgRuntimeNano": "74918747.333",
        "standardDeviationNano": "65542825.906",
        "minNano": "12718935",
        "maxNano": "171054910",
        "varianceNano": "4295862027740509",
        "sumNano": "674268726",
        "invocations": "9"
    }
]
--mmm
content-type: application/json

[
    "serviceName": "wx.interceptor.test.pub.measureRuntimeGraph:tester",
    "stats": {
        "avgRuntimeNano": "74918747.333",
        "standardDeviationNano": "65542825.906",
        "minNano": "12718935",
        "maxNano": "171054910",
        "varianceNano": "4295862027740509",
        "sumNano": "674268726",
        "invocations": "9"
    }
]
--mmm--
'
2015-08-06 22:28:10 CEST [ISP.0090.0008C] 0 transport {com.wm.util.Values} => 
2015-08-06 22:28:10 CEST [ISP.0090.0008C] 1 protocol {java.lang.String} = 'http'
2015-08-06 22:28:10 CEST [ISP.0090.0008C] 1 subprotocol {java.lang.String} = 'HTTP'
2015-08-06 22:28:10 CEST [ISP.0090.0008C] 1 http {com.wm.util.Values} => 
2015-08-06 22:28:10 CEST [ISP.0090.0008C] 2 requestUrl {java.lang.String} = '/rest/test/new_rest'
2015-08-06 22:28:10 CEST [ISP.0090.0008C] 2 method {java.lang.String} = 'POST'
2015-08-06 22:28:10 CEST [ISP.0090.0008C] 2 requestHdrs {com.wm.util.Values} => 
2015-08-06 22:28:10 CEST [ISP.0090.0008C] 3 User-Agent {java.lang.String} = 'Mozilla/4.0 [en] (WinNT; I)'
2015-08-06 22:28:10 CEST [ISP.0090.0008C] 3 Accept {java.lang.String} = 'image/gif, */*'
2015-08-06 22:28:10 CEST [ISP.0090.0008C] 3 Host {java.lang.String} = 'localhost:5597'
2015-08-06 22:28:10 CEST [ISP.0090.0008C] 3 Content-Type {java.lang.String} = 'application/x-www-form-urlencoded'
2015-08-06 22:28:10 CEST [ISP.0090.0008C] 3 Content-Length {java.lang.String} = '864'
2015-08-06 22:28:10 CEST [ISP.0090.0008C] 2 ipInfo {com.wm.util.Values} => 
2015-08-06 22:28:10 CEST [ISP.0090.0008C] 3 localIp {java.lang.String} = '127.0.0.1'
2015-08-06 22:28:10 CEST [ISP.0090.0008C] 3 localPort {java.lang.String} = '5597'
2015-08-06 22:28:10 CEST [ISP.0090.0008C] 3 remoteIp {java.lang.String} = '127.0.0.1'
2015-08-06 22:28:10 CEST [ISP.0090.0008C] 3 remotePort {java.lang.String} = '60228'
2015-08-06 22:28:10 CEST [ISP.0090.0002C] --- END tracePipeline ---

我正在使用wM 9.7顺便说一句。

答案 1 :(得分:0)

在pub.mime:createMimeData中,通过设置mimeHeader而不是单独的值来解决这个问题,但是只在框中添加一个值,用分号分隔标题值,比如

multipart / form-data; boundary =“------ defined ------”; name = file; filename = sample.txt

由于某种原因,Webmethods在设置Content-type的末尾添加了回车符,并且没有考虑我们设置的边界值。

现在生成的消息看起来像, `消息ID:&lt; 1895464254.184.1439491915636.JavaMail.webm@ruudwmia01> MIME版本:1.0 内容类型:multipart / form-data;边界= ------ ------定义;名字=文件;     文件名= sample.txt的

--------定义------ 内容类型:应用程序/文本

{“self”:“http://localhost:8090/jira/rest/api/2.0/status/10000”, “description”:“这个问题目前正在进行中。”, “iconUrl”:“http://localhost:8090/jira/images/icons/progress.gif”, “名称”:“进行中”, “id”:“10000”, “statusCategory”:{  “自我”:“http://localhost:8090/jira/rest/api/2.0/statuscategory/1”,  “id”:1,  “关键”:“飞行中”,  “colorName”:“黄色”,  “colorName”:“黄色”,   “关键”:“飞行中”,  “colorName”:“黄色”,   “关键”:“飞行中”,  “colorName”:“黄色”,   “关键”:“飞行中”,  “colorName”:“黄色”,   “关键”:“飞行中”,  “colorName”:“黄色”, “名称”:“进行中”}} --------定义------ 内容类型:应用程序/文本

{“self”:“http://localhost:8090/jira/rest/api/2.0/status/10000”, “description”:“这个问题目前正在进行中。”, “iconUrl”:“http://localhost:8090/jira/images/icons/progress.gif”, “名称”:“进行中”, “id”:“10000”, “statusCategory”:{  “自我”:“http://localhost:8090/jira/rest/api/2.0/statuscategory/1”,  “id”:1,  “关键”:“飞行中”,  “colorName”:“黄色”,   “关键”:“飞行中”,  “colorName”:“黄色”,   “关键”:“飞行中”,  “colorName”:“黄色”,  “colorName”:“黄色”, “名称”:“进行中”}} -------- --------定义`