我正在尝试将Tomcat(v:9.0.12(与Intellij Idea(v:2018.3(一起使用来部署Artifact(一个简单的hello world javaEE Web应用程序项目(。
这是我在构建和启动项目后的一些输出(我将把这些输出放在一些有用的信息中,你也可以在我的问题末尾找到完整的输出(:
"C:\Program Files\Apache Software Foundation\Tomcat 9.0\bin\catalina.bat" run [2019-09-07 10:58:59,049]神器测试:战争爆发:等待服务器连接开始神器部署... 使用 CATALINA_BASE: "C:\Users\pcs\.IntelliJIdea2018.3\system\tomcat\Tomcat_9_0_12_test" 使用CATALINA_HOME:"C:\Program Files\Apache Software Foundation\Tomcat 9.0" 使用 CATALINA_TMPDIR:"C:\Program Files\Apache Software Foundation\Tomcat 9.0\temp" 使用 JRE_HOME:"C:\Program Files\Java\jdk-10.0.1" 使用 CLASSPATH: "C:\Program Files\Apache Software Foundation\Tomcat 9.0\bin\bootstrap.jar;C:\Program Files\Apache Software Foundation\Tomcat 9.0\bin\tomcat-juli.jar" 错误:代理引发的异常:java.net.MalformedURLException:服务URL包含非ASCII字符0x6f1
之后,我在JMX上遇到了错误,如果我是对的,它发生在:"jdk.management.agent/sun.management.jmxremote.ConnectorBootstrap.startRemoteConnectorServer"(ConnectorBootstrap.java:491(。
我把完整的输出放在最后。
在问我的问题之前,请先看看C:\Program Files\Java\jdk-10.0.1\lib\src.zip!\java.management\javax\management\remote\JMXServiceURL的某些部分.java正如您将看到的那样,它确保URL中没有非ASCII字符,并且其中有我的一部分答案:
public class JMXServiceURL implements Serializable {
private static final long serialVersionUID = 8173364409860779292L;
/**
* Constructs a JMXServiceURL by parsing a Service URL
* string.
*
* @param serviceURL the URL string to be parsed.
*
* @exception NullPointerException if serviceURL is
* null.
*
* @exception MalformedURLException if serviceURL
* does not conform to the syntax for an Abstract Service URL or
* if it is not a valid name for a JMX Remote API service. A
* JMXServiceURL must begin with the string
* "service:jmx:" (case-insensitive). It must not
* contain any characters that are not printable ASCII characters.
*/
public JMXServiceURL(String serviceURL) throws MalformedURLException {
final int serviceURLLength = serviceURL.length();
/* Check that there are no non-ASCII characters in the URL,
following RFC 2609. */
for (int i = 0; i < serviceURLLength; i++) {
char c = serviceURL.charAt(i);
if (c < 32 || c >= 127) {
throw new MalformedURLException("Service URL contains " +
"non-ASCII character 0x" +
Integer.toHexString(c));
}
}
您可以在评论中找到@exception格式错误的URLException,有趣的是我可以看到我的异常消息已准备好:)
我的问题是:我怎样才能找到包含非ASCII字符的jmxRemoteURL值?
这是我已经测试过的内容:
我尝试将"127.0.0.1 localhost 主机名"添加到主机文件的末尾,这没有用,我看不到我的问题与此之间存在任何关系。
我尝试以管理员身份运行Intellij Idea,但也没有工作。
*最后这是我在Intellij Idea Console中的完整输出:
"C:Program FilesApache Software FoundationTomcat 9.0bincatalina.bat" run
[2019-09-07 10:58:59,049] Artifact test:war exploded: Waiting for server connection to start artifact deployment...
Using CATALINA_BASE: "C:Userspcs.IntelliJIdea2018.3systemtomcatTomcat_9_0_12_test"
Using CATALINA_HOME: "C:Program FilesApache Software FoundationTomcat 9.0"
Using CATALINA_TMPDIR: "C:Program FilesApache Software FoundationTomcat 9.0temp"
Using JRE_HOME: "C:Program FilesJavajdk-10.0.1"
Using CLASSPATH: "C:Program FilesApache Software FoundationTomcat 9.0binbootstrap.jar;C:Program FilesApache Software FoundationTomcat 9.0bintomcat-juli.jar"
Error: Exception thrown by the agent : java.net.MalformedURLException: Service URL contains non-ASCII character 0x6f1
jdk.internal.agent.AgentConfigurationError: java.net.MalformedURLException: Service URL contains non-ASCII character 0x6f1
at jdk.management.agent/sun.management.jmxremote.ConnectorBootstrap.startRemoteConnectorServer(ConnectorBootstrap.java:491)
at jdk.management.agent/jdk.internal.agent.Agent.startAgent(Agent.java:450)
at jdk.management.agent/jdk.internal.agent.Agent.startAgent(Agent.java:621)
Caused by: java.net.MalformedURLException: Service URL contains non-ASCII character 0x6f1
at java.management/javax.management.remote.JMXServiceURL.<init>(JMXServiceURL.java:157)
at jdk.management.agent/sun.management.jmxremote.ConnectorBootstrap.exportMBeanServer(ConnectorBootstrap.java:846)
at jdk.management.agent/sun.management.jmxremote.ConnectorBootstrap.startRemoteConnectorServer(ConnectorBootstrap.java:479)
... 2 more
Disconnected from server
如果我错过了要说的话,请告诉我。 非常感谢您的大力帮助。
它通过将 Windows区域格式从波斯语更改为英语来修复我。
通过一点深度观察和做一些研究,我意识到(0x6f1(等于(1777(通过转换 十六进制到十进制在线。似乎有一个非ASCII字符,其(字符到整数(转换结果是1777。
最后,通过转换(int到char(,我意识到char实际上是一个非ASCII:)
(正如CrazyCoder发现的那样(它是扩展的阿拉伯语 - 印度数字一
我的解决方案:我从我的Windows操作系统中删除了波斯语(标准(语言:控制面板\所有控制面板项\语言
- 这是(int到char(Java代码,供谁想知道:
int a = 1777;
char c = (char)a;
System.out.println (c);