我正在维护一个使用java.protocol.handler的Web应用程序。我使用以下代码初始化它:-Djava.protocol.handler.pkgs=<my value>
。
问题如下:
1.如果我部署应用程序。直接从eclipse到tomcat,使用这个instruction(直接引用Tomcat主类)并在VM参数选项卡中传递-Djava.protocol.handler.pkgs=<my value>
参数,应用程序正常工作,并且初始化-protocol依赖bean。
2.如果我将.war文件直接部署到Tomcat / webapps并使用catalina.bat
启动tomcat(将-Djava.protocol.handler.pkgs=<my value>
添加到JAVA_OPTS
),我得到:Malformed URL supplied Exception
。
3.如果我从eclipse启动Tomcat(并指定类似于第1点的VM参数),将正确部署相同的.war。
我的猜测是catalina.bat和eclipse如何初始化VM参数之间存在差异。或许我应该以某种方式将我的项目.jars附加到Tomcat。
感谢您的任何提示。我可以提供所需的更多细节
答案 0 :(得分:0)
根据评论,如果没有更多信息,很难知道发生了什么,但也许这会有所帮助。 Tomcat调用URL.setURLStreamHandlerFactory
来设置自己的URLStreamHandlerFactory
,它会覆盖java.protocol.handler.pkgs
系统属性的默认行为。然后,您无法在不破坏内部Tomcat功能的情况下使用自己的处理程序调用{{1}}。 URLStreamHandlers系统当然不是Java的最大特色。
我发现可靠地使用我自己的流处理程序的唯一方法是将其传递到URL constructor:
URL.setURLStreamHandlerFactory
答案 1 :(得分:0)
我们注意到-Djava.protocol.handler.pkgs =“my.protocol”在Tomcat 6.0.x中工作如果协议实现在Tomcat lib文件夹中而不是在战争中...
也许这有助于其他人