【问题标题】:Mule 4 java class callMule 4 java类调用
【发布时间】:2021-08-12 19:53:19
【问题描述】:

好的,所以我已经在这里设置了我的 mule 4 应用程序,创建了一个小的 java 类来模拟掷骰子并将其连接起来。它可以编译,但是当我尝试点击它时出现此错误:

"Invocation of static Method 'rollDie(java.lang.String)' from Class 'objects.Dice' with arguments [java.lang.String sides] resulted in an error.

预期的参数是 [java.lang.String 边]"

我有一个叫做 Die 的小 ENUM

package objects;

public enum Die {
    FOUR,SIX,EIGHT,TEN,TWELVE,TWENTY,HUNDRED;
}

还有我的名为 Dice 的主要 java 类

package objects;

import java.util.Random;

    public class Dice {
        private static Random rand;
        
        public Dice()
        {
            rand = new Random();
        }
    
        public static int rollDie(String sides)
        {
            Die die = getDie(sides);
    //      Die die = Die.TWENTY;
            switch(die)
            {
                case FOUR:
                    return rand.nextInt(4)+1;
                case SIX:
                    return rand.nextInt(6)+1;
                case EIGHT:
                    return rand.nextInt(8)+1;
                case TEN:
                    return rand.nextInt(10)+1;
                case TWELVE:
                    return rand.nextInt(12)+1;
                case TWENTY:
                    return rand.nextInt(20)+1;
                case HUNDRED:
                    return rand.nextInt(100)+1;
                default:
                    return -1;  
            }
        }
        
        private static Die getDie(String input)
        {
            if(input.equals("4"))
                    return Die.FOUR;
            else if(input.equals("6"))
                    return Die.SIX;
            else if(input.equals("8"))
                    return Die.EIGHT;
            else if(input.equals("10"))
                    return Die.TEN;
            else if(input.equals("12"))
                    return Die.TWELVE;
            else if(input.equals("20"))
                    return Die.TWENTY;
            else if(input.equals("100"))
                    return Die.HUNDRED;
            else
                return null;
        }
    }

我的流程只是 /roll 上带有标准 http 侦听器的侦听器。使用类“objects.Dice”调用 rollDie() 并像这样传递 arg 的静态调用调用

{
  sides : "20"
}

不知道我在这里做错了什么。任何人的任何见解?有人告诉我,由于 mule 4 的最新版本,我不必对 mule-artifact.json 文件执行导入操作,所以不确定我还能做些什么来显示这个界面,它正在获得正确的输入类型...帮助?

谢谢, 乔恩

【问题讨论】:

  • 请将流中的静态调用操作添加为 XML。还使用了哪些确切版本的 Mule 4 和 Java 模块?如果错误消息中有任何其他行,请将它们添加到问题中。

标签: java static mule anypoint-studio mulesoft


【解决方案1】:

您的 Dice 类是完全静态的。不需要实例。

除了.. 您的 random 变量仅在您创建实例时才实际分配。

因此,这个类没有意义。它被设计为一个实用程序类,除非你创建一个实例,否则它会被完全破坏,但实例是完全没用的。因此,要按原样使用它,您必须在某个时间点创建一个实例,恰好一次,立即将该实例扔进垃圾箱,然后继续使用静态方法。

此外,您的环境配置错误 - 请按照说明启用详细异常日志记录。开发一个错误让你“它没有工作”并且没有更多细节的应用程序比写一个你确实得到一些反馈的应用程序复杂数百倍。

要解决这个特定问题,private static Random rand = new Random();,然后删除构造函数,因为它没用。

【讨论】:

  • 这是为了让某些东西发挥作用而做出的疯狂尝试......虽然我似乎修复了之前被破坏的东西,并通过创建构造函数来破坏它...... oof。度过了漫长的一天。但是当我删除构造函数时,这确实解决了问题。谢谢。
  • 环境不是问题。在 Mule 应用程序中使用 Java 代码时发生此错误。默认情况下,该错误仅打印 Mule 错误,但同一消息实际上说明了如何启用详细异常日志记录。这将为您提供完整的异常和堆栈跟踪,指向 rollDie() 中的 NullPointerException。如果这是一个问题,您总是可以先在 Java 环境中开发和测试您的 Java 代码,或者将其作为 jar 依赖项添加到 Mule 项目中。更多信息:docs.mulesoft.com/mule-runtime/4.3
  • @aled 很棒的评论,谢谢。我已经稍微更新了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多