2012-05-15 65 views
1

我试图执行wsgen命令来创建一个Web服务。我的命令行是:wsgen和App Engine

PATH=%path%;C:\Program Files\Java\jdk1.6.0_24\bin 
wsgen -cp ".\war\WEB-INF\classes" -wsdl -keep -r ".\war" -d ".\war\WEB-INF\classes" -    s ".\war" "com.example.prototipo21.Greeting" 

而且出现这个错误: 警告:对于javax.jdo.annotations类文件:在类型“javax.jdo.annotations.Persisten”无法找到标注方法“valueStrategy()”。持久未找到。 错误:找不到类文件com.example.prototipo21.Greeting 1错误 1警告 错误:编译失败,错误应该已报告

我认为这个问题可以我整合数据存储应用在一个Web服务应用程序中,所以我的类有不同的注释。例如:

@WebService 
public class Greeting { 

@PrimaryKey 
@Persistent (valueStrategy = IdGeneratorStrategy.IDENTITY) 
private Key key; 

@Persistent 
private User author; 

...

@WebMethod 
public Key getKey() { 
    return key; 
} 
@WebMethod 
public User getAuthor(){ 
    return author; 

....

你知道我是什么意思?任何想法都会非常有用!谢谢!

这些都是我的命令,整个跟踪:

c:\Users\...\Desktop\....\Eclipse\Prototipo_21>PATH=%pa 
th%;C:\Program Files\Java\jdk1.7.0_03\bin 

c:\Users\...\Desktop\....\Eclipse\Prototipo_21>wsgen -c 
p ".\war\WEB-INF\classes" -wsdl -keep -r ".\war" -d ".\war\WEB-INF\classes" -s " 
.\war" "com.example.prototipo21.Greeting" 

warning: The apt tool and its associated API are planned to be 
removed in the next major JDK release. These features have been 
superseded by javac and the standardized annotation processing API, 
javax.annotation.processing and javax.lang.model. Users are 
recommended to migrate to the annotation processing features of 
javac; see the javac man page for more information. 
.\war\WEB-INF\classes\com\example\prototipo21\Greeting.class: warning: Cannot fi 
nd annotation method 'valueStrategy()' in type 'Persistent': class file for java 
x.jdo.annotations.Persistent not found 
warning: unknown enum constant IdGeneratorStrategy.IDENTITY 
reason: class file for javax.jdo.annotations.IdGeneratorStrategy not found 
error: Could not create declaration for annotation type javax.jdo.annotations.Pr 
imaryKey 
error: Could not create declaration for annotation type javax.jdo.annotations.Pe 
rsistent 
Problem encountered during annotation processing; 
see stacktrace below for more information. 
com.sun.tools.internal.ws.processor.modeler.ModelerException: modeler error: Cla 
sses annotated with @javax.jws.WebService must have a public default constructor 
. Class: com.example.prototipo21.Greeting 
    at com.sun.tools.internal.ws.processor.modeler.annotation.WebServiceAP.o 
nError(WebServiceAP.java:229) 
    at com.sun.tools.internal.ws.processor.modeler.annotation.WebServiceVisi 
tor.isLegalImplementation(WebServiceVisitor.java:515) 
    at com.sun.tools.internal.ws.processor.modeler.annotation.WebServiceVisi 
tor.shouldProcessWebService(WebServiceVisitor.java:322) 
    at com.sun.tools.internal.ws.processor.modeler.annotation.WebServiceVisi 
tor.visitClassDeclaration(WebServiceVisitor.java:113) 
    at com.sun.tools.apt.mirror.declaration.ClassDeclarationImpl.accept(Clas 
sDeclarationImpl.java:113) 
    at com.sun.tools.internal.ws.processor.modeler.annotation.WebServiceAP.b 
uildModel(WebServiceAP.java:319) 
    at com.sun.tools.internal.ws.processor.modeler.annotation.WebServiceAP.p 
rocess(WebServiceAP.java:260) 
    at com.sun.mirror.apt.AnnotationProcessors$CompositeAnnotationProcessor. 
process(AnnotationProcessors.java:84) 
    at com.sun.tools.apt.comp.Apt.main(Apt.java:480) 
    at com.sun.tools.apt.main.AptJavaCompiler.compile(AptJavaCompiler.java:2 
70) 
    at com.sun.tools.apt.main.Main.compile(Main.java:1127) 
    at com.sun.tools.apt.main.Main.compile(Main.java:989) 
    at com.sun.tools.apt.Main.processing(Main.java:113) 
    at com.sun.tools.apt.Main.process(Main.java:103) 
    at com.sun.tools.apt.Main.process(Main.java:85) 
    at com.sun.tools.internal.ws.wscompile.WsgenTool.buildModel(WsgenTool.ja 
va:207) 
    at com.sun.tools.internal.ws.wscompile.WsgenTool.run(WsgenTool.java:111) 

    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. 
java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces 
sorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at com.sun.tools.internal.ws.Invoker.invoke(Invoker.java:120) 
    at com.sun.tools.internal.ws.WsGen.main(WsGen.java:42) 
error: compilation failed, errors should have been reported 

回答

0

误差与你所编写的代码没有问题。问题在于类路径。如果您检查错误,你可以清楚地看到:

找不到类文件com.example.prototipo21.Greeting1

修复你的类路径,使类是提供给WSGEN,你可能提前获得了一步,绊倒在下一组错误:)祝你好运

+0

嗯,我已经改变了JDK的路径,现在在CMD的错误是:警告:apt工具及其相关API的计划在下一个主要的JDK版本中被删除[....更多警告...]错误:无法为注释类型javax.jdo.annotations创建声明。首要的关键。错误:无法为annontation类型javax.jdo.annotation.Persistent [...]创建声明。任何想法??谢谢!! =) –

+0

你能发布完整的错误吗?细节不足以说明任何内容 –

+0

是的,我编辑我的主要问题添加逗号和警告和错误,请看看那里,请!谢谢!! –

0

我有同样的错误。你得到这个错误的原因是你必须给wsgen一个GAE所使用的库的引用。

只需修改类路径以包含其他jar文件即可。请注意,在Unix中,我们使用冒号“:”来分隔目录,而在Windows中我们使用分号“;”。

(只需更改相应的目录路径)

class=com.sample.MyWebService 
clpth='./war/WEB-INF/classes:/Applications/eclipse_jee/plugins/com.google.appengine.eclipse.sdkbundle_1.7.0/appengine-java-sdk-1.7.0/lib/opt/user/datanucleus/v2/jdo-api-3.1-SNAPSHOT-20110926.jar:/Applications/eclipse_jee/plugins/com.google.appengine.eclipse.sdkbundle_1.7.0/appengine-java-sdk-1.7.0/lib/user/appengine-api-1.0-sdk-1.7.0.jar' 
resourcedir='./war' 
outsourcedir='./src' 
outdir='./war/WEB-INF/classes' 
wsgen -cp "$clpth" -wsdl -keep -r "$resourcedir" -d "$outdir" -s "$outsourcedir" $class