我来自C#所以我意识到我不能指望Java中存在很多(优秀的)可用性特性和功能,但我最近有点像这个Java项目,我根本无法想象这个.在C#/ .NET中,Web服务代理类和生成的数据契约是不可能的,但由于某种原因,Web服务的Java实现对我来说似乎并不合适.
这是交易......
我使用wsimport从.wsdl文件创建生成的.java文件.例如...
"%JAVA_HOME%\bin\wsimport" -quiet -extension -s .\src -d .\bin ".\wsdl\MyWSDL.wsdl"
Run Code Online (Sandbox Code Playgroud)
我注意到这个硬编码(输入那个短语几乎让我呕吐)"wsdlLocation"作为wsdl的当前位置("C:\ Users\ME\etc\wsdl\MyWSDL.wsdl").所以我把它拿出来:
"%JAVA_HOME%\bin\wsimport" -quiet -extension -s .\src -d .\bin -wsdllocation "NULL" ".\wsdl\MyWSDL.wsdl"
Run Code Online (Sandbox Code Playgroud)
现在,当我实例化生成的服务时......
MyService xyz = new MyService();
Run Code Online (Sandbox Code Playgroud)
我收到一个错误.有些东西沿着"找不到文件C:\ blahblah\Temp\NULL".好的......回到绘图板.在对此进行了一些调查后,我在Stack Overflow上发现了一篇帖子,其中讨论了使用"classpath:META-INF/WSDL.wsdl"作为wsdl位置.
"%JAVA_HOME%\bin\wsimport" ... -wsdllocation "classpath:WSDLs/MyWSDL.wsdl" ".\wsdl\MyWSDL.wsdl"
copy ".\wsdl\*" .\bin\WSDLs
cd bin
"%JAVA_HOME%\bin\jar" cf WebServiceProxies.jar *
Run Code Online (Sandbox Code Playgroud)
错误!
"Unknown protocol: classpath"
Run Code Online (Sandbox Code Playgroud)
奇怪的是,Stack Overflow上的帖子被标记为答案.我想有可能在过去的两年中,一个不错的数量已经改变到不再支持"classpath:"的地步,或者有另一种方法可以做到这一点,但我无法弄清楚/找到答案.
好的,所以我需要回答几个问题之一(先谢谢!!!!我在这里疯了!).
有没有办法让它在运行时不需要WSDL?对于它的价值,我认为当我实例化对象时它需要这个BS.有什么方法可以抑制这个要求?也许如果我使用不同的工具......?
如果此代码无法在运行时不需要WSDL,那么如何让它从包中获取此WSDL?我在wsdllocation参数中放入什么来使其从JAR文件中加载WSDL?
我在运行与JMS有关的某些Java代码时遇到错误.我已经把头发拉了两天试图解决这个问题.
我得到的例外是"java.lang.NoClassDefFoundError:javax/jms/Message"
java.lang.NoClassDefFoundError: javax/jms/Message
at Asci.ActiveBatch.JMSAgent.JMSManager.createMsg(JMSManager.java:195)
at Asci.ActiveBatch.JMSAgent.JMSService.SendMessageHandler(JMSService.java:160)
Run Code Online (Sandbox Code Playgroud)
没有详细介绍TOO,这是指这一行:
public static void createMsg(String icf, String url, String cf, String QName, String msgText, String[] props, String user, String pass) throws Exception {
JMSProducer.produceMsg(icf, url, cf, QName, msgText, props, user, pass);
}
Run Code Online (Sandbox Code Playgroud)
(不要问为什么这个函数基本上映射到另一个...我最初没有编写这段代码)
我把这段代码称为
java -jar /path/myjarfile.jar
Run Code Online (Sandbox Code Playgroud)
javax.jms.jar包含在该jar的清单中(并且它存在于该位置),但以防万一我还尝试将类路径包含到我的lib文件夹(当然包含javax.jms.jar),如下所示:
java -classpath /path/lib:. -jar /path/myjarfile.jar
Run Code Online (Sandbox Code Playgroud)
到目前为止我没有运气.我不知道该怎么做或如何调试这个问题.任何帮助将不胜感激.显然,这段代码会编译,因此这些类必须在编译时(至少)可用.
谢谢.
EDITS:
1)我也尝试了java -classpath /path/lib/javax.jms.jar:.-jar /path/myjarfile.jar
2)此问题发生在运行时,而不是编译时.
3)所以,我有其他代码在相同的jar文件中调用相同的方法.从特定的jar调用此代码时,有些东西没有正确啮合.我检查并重新检查了我的其他代码,以确保它是相同的(它是/是),所以它似乎不是一个代码问题.在某处似乎有一些混乱的参考或某事.
我无法像示例中那样让“Chip”控件支持“X”按钮:http://www.material-ui.com/#/components/chip
添加“onRequestDelete”属性会添加“X”按钮,但单击它不会执行任何操作。事实上,悬停在“X”按钮本身上似乎并没有触发其悬停效果(即整个芯片具有悬停效果,并且按钮本身应该具有悬停效果 - 看起来并不像按钮的悬停效果曾经发生过)。就像我无法获得按钮的焦点一样。
注意:如果我单击芯片并按“删除”键,则会弹出“> IN DELETE”警报。我注意到类似的行为,因为我也尝试使用material-ui-chip-input,“Backspace”可以删除芯片,但我永远不能使用“X”按钮。
基本示例:
import React from 'react';
import Chip from 'material-ui/Chip';
class MyChip extends React.Component {
constructor(props) {
super(props);
this.delete = this.delete.bind(this);
}
delete(e) {
alert(" > IN DELETE"); // Does not fire on button click (except when I hit "Delete" key, see above explanation)
}
render() {
return <Chip key={0} onRequestDelete={this.delete}>testy</Chip>;
}
}
Run Code Online (Sandbox Code Playgroud)
相关package.json依赖项:
"material-ui": "^0.16.7",
"material-ui-chip-input": "^0.12.1",
"react": "^15.4.2",
"react-dom": "^15.4.2",
"react-tap-event-plugin": "^2.0.1",
Run Code Online (Sandbox Code Playgroud) java ×2
exception ×1
javascript ×1
jms ×1
material-ui ×1
reactjs ×1
web-services ×1
wsdl ×1
wsimport ×1