我们有一堆自动生成的类,主要是Axis2存根,骨架等.对于一些复杂的wsdls,Axis2生成一个java-beans,stubs等的TON.我确信在使用自动生成时还有其他情况.
现在我们将它们视为代码库的其他第一类成员,它们存储在相同的包中.
但是,在进行重构,清理等操作时,很难清除来自这些自动生成的类的警告.例如,如果我试图清理代码以便使用Java1.5泛型,那么就没有什么好方法可以知道这些违规类中有多少是我们自动生成的.
我应该将这些自动生成的零件分离到不同的包装中吗?你们如何将这些工件存储在存储库中?
编辑:我在下面的相当多的答案中看到"在构建过程中生成".虽然我看到了这样做的好处,但我不知道如何摆脱存储库检查.
我的代码对这些类中的某些类具有编译时依赖性,对我来说,开发期间的构建是eclipse中的"ctrl-s".我们使用ant-scripts生成编译,运行测试并生成可交付成果.
我正在开发一个客户端Java应用程序,它具有一些功能,需要从一些以JSON传输的Web服务中获取数据(一些是RESTful,一些不是).没有JavaScript,没有Web浏览器,只是一个普通的JAR文件,它将使用Swing为GUI本地运行.
这不是一个新的或独特的问题; 肯定有一些开源库可以通过HTTP处理JSON数据传输.我已经发现了一些将解析JSON,但我找不到任何能够处理HTTP通信来使用JSON Web服务的东西.
到目前为止,我发现Apache Axis2显然可能至少有部分解决方案,但我没有看到足够的文档知道它是否能满足我的需要,或者如何使用它.也许问题的一部分是我没有Web服务的经验,所以当我看到它时,我无法知道解决方案.我希望你们中的一些人能指出我正确的方向.例子会有所帮助.
我有一个Java项目,它是人工编写的Java代码和axis2生成的Java代码的组合.
axis2生成的代码引发了来自Java编译器的数千个警告(javac或内置于Eclipse中的警告).警告的示例:死代码,使用原始列表和早于Java泛型的数组类型等(更多信息,请访问http://www.coderanch.com/t/501752/Web-Services/java/Axis-Generate-without-Warnings).我想沉默并忽略生成的代码中的这些特定警告,而不是人工编写的代码.
我已经看到如何在Eclipse中添加-Xlint:unchecked选项或任何javac选项?这允许我通过Window-> Preferences禁用相关警告,但是在工作区范围内,这不是我想要的.有没有办法在每个项目的基础上做到这一点?
如果没有,人们如何处理生成的代码而不忽略对人类有用的警告?
我刚刚回到Java,我一直在试图弄清楚我应该如何组织我的项目.我来自C#背景,你必须确保你编译的库可以被可执行文件(或其他库)检索,方法是将它们保存在相同的文件夹或子文件夹中,但java似乎做了不同的事情.
在我的Eclipse工作区中,我有我正在处理的主项目(现在只有一个,后来更多),它引用了外部JAR(在我的例子中,Apache Axis2的大量文件).
我应该在哪里存储我的项目在构建时依赖的库?我需要很快将所有内容添加到源代码控制中,因此我无法通过机器上的绝对路径继续引用这些JAR.我读到了把这个放在我主要项目的子文件夹中的建议,但我觉得这并不理想.我想我应该将它们保存在与项目相同的源控制父文件夹中,并以某种方式通过相对路径引用它们(eclipse一个通过UI执行绝对路径,真的吗?),所以类似于:
c:\ JavaProjects\MyProject c:\ JavaProjects\axis2-1.5.4 c:\ JavaProjects \%,无论其他库%
还有更好的方法吗?
我遵循了合同第一的方法.所以我首先编写了wsdl文件,然后生成了服务器端代码.但是当我在浏览器中点击我的Web服务的URL时,我看到自动生成的wsdl文件; 不是我保存在META-INF文件夹中的那个.我还在services.xml文件中设置了useOriginalwsdl = true.当我尝试在浏览器中的WSDL,它触发错误 无法生成WSDL 1.1此项服务在描述部分, 如果你想Axis2的自动生成WSDL 1.1,那么请设定useOriginalwsdl为假在你的services.xml的原因错误标记部分.
请帮我.
我已经使用Axis2向我的项目添加了一个Web服务,现在我无法运行我的应用程序.
这是我使用的类路径:
<property name="classpath" location="bin:EventReservationCore/bin:EventReservationCore/db:EventReservationCore/lib/*:EventReservationCore/lib/util_iso2.jar:EventReservationCore/lib/sqlitejdbc-v056.jar:AuthorizationRMI/lib/AuthorizationService.jar:EventReservationCore/lib/activemq-all-5.4.3.jar:/home/ander/axis2-1.6.1/webapp/axis2.war"/>
Run Code Online (Sandbox Code Playgroud)
这是在我添加Axis2 Web服务之前运行的目标.
<target name="run.besocial">
<java classname="eventReservationServer.ReservationEventServer" classpath="${classpath}" fork="true">
<jvmarg value="-Djava.rmi.server.codebase=file:EventReservationCore/bin/ file:EventReservationCore/lib/util_iso2.jar"/>
<jvmarg value="-Djava.security.policy=EventReservationCore/java.policy" />
</java>
</target>
Run Code Online (Sandbox Code Playgroud)
结果我得到了这个错误:
[java] Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/axis2/client/Stub
[java] at java.lang.ClassLoader.defineClass1(Native Method)
[java] at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
[java] at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
[java] at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
[java] at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
[java] at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
[java] at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
[java] at java.security.AccessController.doPrivileged(Native Method)
[java] at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
[java] at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
[java] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
[java] at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
[java] at eventReservationServer.eventServerGateway.WSEventServerGateway.getEvents(WSEventServerGateway.java:19)
[java] at eventReservationServer.ReservationEventServer.<init>(ReservationEventServer.java:101)
[java] at eventReservationServer.ReservationEventServer.main(ReservationEventServer.java:130)
[java] Caused by: java.lang.ClassNotFoundException: …Run Code Online (Sandbox Code Playgroud) 我正在开发一个Java EE项目,需要将Web服务合并到外部源或从外部源接收数据.我不确定走哪条路,Axis2或JAX-WS.
任何建议将不胜感激.
我在版本中使用Axis2:
Implementation-Version: 1.7.0-SNAPSHOT
Implementation-Vendor-Id: org.apache.axis2
Implementation-Vendor: The Apache Software Foundation
Jenkins-Build-Number: 1847
Run Code Online (Sandbox Code Playgroud)
我想将ServiceClient的超时设置为2000毫秒,这是我们的代码:
Options options = new Options();
options.setTo(new EndpointReference(getUserServiceEndPoint()));
options.setProperty(Constants.Configuration.ENABLE_REST,
Constants.VALUE_TRUE);
// setting timeout to 2 second should be sufficient, if the server is
// not available within the 3 second interval you got a problem anyway
options.setTimeOutInMilliSeconds(2000);
ServiceClient sender = new ServiceClient();
sender.engageModule(new QName(Constants.MODULE_ADDRESSING)
.getLocalPart());
sender.setOptions(options);
OMElement getSessionResult = sender
.sendReceive(getPayloadMethodGetSession());
Run Code Online (Sandbox Code Playgroud)
但是我仍然在日志中看到:
org.apache.axis2.AxisFault:主机在60000毫秒的超时时间内未接受连接
而且确实需要60秒。因此,错误消息不仅是错误的,而且似乎只是忽略了超时选项,并且始终使用默认选项。
有人有类似的问题吗?
由于
塞巴斯蒂安
我正在从事网络服务.我想知道如何在JAX-WS类型的Web服务中向SOAP请求添加标头.
考虑我的头像这样.
Map<String, List<String>> headers = new HashMap<String, List<String>>();
headers.put("Username", Collections.singletonList("aaaa"));
headers.put("Password", Collections.singletonList("aaaa"));
Run Code Online (Sandbox Code Playgroud)
我的客户端类中有stub对象.我正在使用Apache Axis 2.所有类都是自动生成的.
SimpleSTub stub = new Simplestub();
Run Code Online (Sandbox Code Playgroud)
我想在客户端添加此标头信息.
MessageContext.HTTP_REQUEST_HEADERS, headers
Run Code Online (Sandbox Code Playgroud)
编辑
在普通类中的实际实现发现为
private static final String WS_URL ="http:// localhost:9999/ws/hello?wsdl";
public static void main(String [] args)throws Exception {
URL url =新URL(WS_URL); QName qname = new QName("http://ws.mkyong.com/","HelloWorldImplService");
Service service = Service.create(url, qname);
HelloWorld hello = service.getPort(HelloWorld.class);
/*******************UserName & Password ******************************/
Map<String, Object> req_ctx = ((BindingProvider)hello).getRequestContext();
req_ctx.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, WS_URL);
Map<String, List<String>> headers = new HashMap<String, List<String>>();
headers.put("Username", Collections.singletonList("mkyong"));
headers.put("Password", Collections.singletonList("password")); …Run Code Online (Sandbox Code Playgroud) 我想将RAW请求响应XML打印到控制台.我使用wsdl2java axis2创建了存根.
wsdl2java创建了2个java文件,一个用于存根,一个用于callbackhandler.
我正在尝试使用以下方法,但获取null值
operationContext.getMessageContext("Out");
/
operationContext.getMessageContext("In");.
Run Code Online (Sandbox Code Playgroud)
码
public void SOAPLogHandler(Stub stub){
ServiceContext serviceConxt = stub._getServiceClient().getServiceContext();
//**** Enable the Cache to hold the last operation
OperationContext OperationContext = new OperationContext();
boolean cacheLastOperationContext = true;
OperationContext.setComplete(true); // Enable the Cache value
serviceConxt.setCachingOperationContext(cacheLastOperationContext);
serviceConxt.setLastOperationContext(OperationContext);
OperationContext operationContext = serviceConxt.getLastOperationContext();
if (operationContext != null) {
MessageContext outMessageContext = operationContext.getMessageContext("Out");
operationContext.getMessageContexts();
if (outMessageContext != null) {
System.out.println("OUT SOAP: "+outMessageContext.getEnvelope().toString());
}
MessageContext inMessageContext = operationContext.getMessageContext("In");
if (inMessageContext != null) {
System.out.println("IN SOAP: "+ inMessageContext.getEnvelope().toString());
}
} …Run Code Online (Sandbox Code Playgroud)