格式化HTML作为MX4J HTTP页面方法调用的输出

时间:2010-03-08 08:12:13

标签: java jmx

我有大量数据,想要以一些格式显示数据 这个方法基本上是这样的:


    @ManagedOperation(description = "return html")
@ManagedOperationParameters({@ManagedOperationParameter(name = "someVal", description = "text")})
public String returnAsHtml(String someVal)
{
return "some formatted xml";
}

看起来XSLTProcessor可以配置为使用XSLT模板。但是我在MX4J的上下文中使用XSLT for html转换在互联网上找不到任何示例。任何人都可以提供示例XSLT模板吗?

2 个答案:

答案 0 :(得分:1)

如果有人回到这个问题,我会想到两件事:

1)MX4J有几个HttpCommandProcessorAdaptor的默认实现。这些操作从路径映射。对于JMX操作(在Spring的说法中称为ManagedOperation),MX4J使用像/ invoke这样的URL?operation = returnAsHtml

这将被传递给InvokeOperationCommandProcessor以创建一个XML文档,其结果只是你返回的任何东西的toString(),在一个名为'return'的属性中。它还在名为“returnclass”的属性中传回返回类型。如果只是将&template=identity添加到调用URL,则可以看到所有这些。

我提到这一切是因为一个选项是实现你自己的'invoke.xsl'。 MX4J中的那个只调用renderobject模板:

瞧,你可以在mbean_attributes.xsl找到这个,并且评论显示完全你需要做什么:

   <xsl:template name="renderobject">
  <xsl:param name="objectclass"/>
  <xsl:param name="objectvalue"/>
  <xsl:choose>
     <xsl:when test="$objectclass='javax.management.ObjectName'">
        <xsl:variable name="name_encoded">
           <xsl:call-template name="uri-encode">
              <xsl:with-param name="uri">
                 <xsl:value-of select="$objectvalue"/>
              </xsl:with-param>
           </xsl:call-template>
        </xsl:variable>
        <a href="/mbean?objectname={$name_encoded}">
           <xsl:value-of select="$objectvalue"/>
        </a>
     </xsl:when>
     <xsl:otherwise>
        <!-- Use the following line when the result of an invocation
        returns e.g. HTML or XML data
        <xsl:value-of select="$objectvalue" disable-output-escaping="true" />
        -->
        <xsl:value-of select="$objectvalue"/>
     </xsl:otherwise>
  </xsl:choose>

将'disable-output-escaping'设置为true将可以解决问题

2)另一种选择是编写自己的HttpCommandProcessorAdaptor,并在HttpAdapter上设置它。这可以替换'invoke'处理器,也可以换一个全新的处理器。

希望有所帮助

答案 1 :(得分:0)

我想到的一种方法是在XSL模板中使用java脚本来提取和解析字符串。确保测试浏览器(IE vs Non IE)并使用正确的解析器。