如何使用Atlassian本地API编程将JIRA Wiki标记转换为HTML?

3
我正在尝试从JIRA获取问题描述并将其放入Confluence存储格式模板中,以创建一个Confluence页面。但我找不到一种方法去渲染描述的原始数据为可识别的存储格式。这里有一个具体的例子: 对于JIRA中的一个问题,其描述如下:

enter image description here

通过调用com.atlassian.jira.issue.Issue.getDescription()获得的描述字符串为:
{color:#14892c}Recently Updated{color}
h1. *_As you and your team create content this area will fill up and display the latest updates._*

如果我没理解错的话,我得到的字符串是它的维基模板表示形式。将其直接插入存储格式中,模板引擎将无法识别它,因此也无法正确呈现。
我尝试使用<ac:rich-text-body>来包含该字符串,但这并不起作用。看起来我必须将维基表示形式转换为HTML或XHTML。我该如何在Java代码中实现这一点?
2个回答

5

将JIRA wiki标记转换为JIRA的HTML渲染输出:

import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.ComponentManager;

public String renderWikiMarkup(Issue issue) {
    RendererManager rendererManager = ComponentManager.getComponent(RendererManager.class);
    JiraRendererPlugin renderer = rendererManager.getRendererForType("atlassian-wiki-renderer");
    String output = renderer.render(issue.description, issue.getIssueRenderContext());
    return output;
}

感谢提供这些信息!这是一个不错的起点。当我将它显示到控制台时,我得到了一个格式正确的链接。然而,当我创建一个完全相同内容的对象,并将其发送到一个velocity模板中时,它会产生一个看起来像[1]link title ---------------------------------------------------------------------------------------- [1] http://example.com的链接。我猜想在传递给velocity渲染器时IssueRendererContext 发生了一些变化。有什么办法可以防止这种情况发生吗? - KendallV

1
这是针对Atlassian Jira 8.0.0或更高版本的完全可用解决方案。
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.issue.RendererManager;
import com.atlassian.jira.issue.fields.renderer.JiraRendererPlugin;
import com.atlassian.jira.issue.fields.renderer.IssueRenderContext;

public String renderWikiMarkupOfDescription(String descriptor, Issue issue) {
    RendererManager rendererManager = ComponentAccessor.getComponentOfType(RendererManager.class);
    JiraRendererPlugin renderer = rendererManager.getRendererForType("atlassian-wiki-renderer");
    String output = renderer.render(descriptor, new IssueRenderContext(issue));
    return output;
}

public String renderWikiMarkupOfEnvironment(String environment, Issue issue) {
    RendererManager rendererManager = ComponentAccessor.getComponentOfType(RendererManager.class);
    JiraRendererPlugin renderer = rendererManager.getRendererForType("atlassian-wiki-renderer");
    String output = renderer.render(environment, new IssueRenderContext(issue));
    return output;
}

并使用:

renderWikiMarkupOfDescription(issue.getDescription(), issue);
renderWikiMarkupOfEnvironment(issue.getEnvironment(), issue);

并且附上截图以证明此方法百分之百成功:

Description Rendered to HTML 1 Description Rendered to HTML 2 Environment Rendered to HTML 1


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接