【问题标题】:Adding attachments to JIRA REST API using Webmethods as Client使用 Webmethods 作为客户端将附件添加到 JIRA REST API
【发布时间】:2015-08-06 17:34:39
【问题描述】:

我可能不是第一个尝试使用 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,虽然Header中的Boundary设置为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 Unsupported Media Type,从 HTTP POST CALL 到 URL,尝试通过调用 JIRA REST API 添加附件。

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

【问题讨论】:

    标签: api rest jira attachment webmethods


    【解决方案1】:

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

    名称=内容类型 值=多部分/表单数据;边界=mmm

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

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

    contentype String 可选。 此正文部分的 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 顺便说一句。

    【讨论】:

    • 在 pub.mime:createMimeData 中,通过设置 mimeHeader 解决了这个问题,不是作为单独的值,而是通过仅添加一个值并在框内,用分号分隔标题值,例如
    【解决方案2】:

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

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

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

    生成的消息现在看起来像, `消息 ID: 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”, “状态类别”:{ "自我": "http://localhost:8090/jira/rest/api/2.0/statuscategory/1", “身份证”: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”, “状态类别”:{ "自我": "http://localhost:8090/jira/rest/api/2.0/statuscategory/1", “身份证”:1, “关键”:“飞行中”, "colorName": "黄色", “关键”:“飞行中”, "colorName": "黄色", “关键”:“飞行中”, "colorName": "黄色", "colorName": "黄色", “名称”:“进行中”}} --------定义--------`

    【讨论】:

    • 这是在 Webmethods 9.8 中,虽然已解决,但 JIRA API 不采用 mime 流,并抛出 415 Unsupported Media Type
    • JiRA Rest Api 将附件数据添加到问题不支持流数据。它只支持文件对象。
    • HTTP 415,可以通过设置Content-Type来解决。 JIRa Api 抛出 HTTP 500 内部服务器错误,因为它不支持输入流。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    • 2015-03-20
    • 1970-01-01
    • 1970-01-01
    • 2022-09-25
    • 1970-01-01
    相关资源
    最近更新 更多