【问题标题】:wsgen and App Enginewsgen 和 App Engine
【发布时间】:2012-05-15 20:21:25
【问题描述】:

我正在尝试执行 wsgen 命令来创建 Web 服务。我的命令行是:

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.Persisten”类型中找不到注释方法“valueStrategy()”:找不到 javax.jdo.annotations.Persistent 的类文件。 错误:找不到 com.example.prototipo21.Greeting 的类文件 1 个错误 1 个警告 error:编译失败,应该报错

我认为问题可能是我将数据存储应用程序集成到 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

【问题讨论】:

    标签: java web-services google-app-engine webmethod wsgen


    【解决方案1】:

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

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

    修复您的类路径,以便该类可用于 wsgen,您可能会领先一步并在下一组错误中绊倒:) 祝您好运

    【讨论】:

    • 好吧,我已经更改了 jdk 的路径,现在 cmd 中的错误是:警告:计划在下一个主要 JDK 版本中删除 apt 工具及其相关 API [。 ...更多警告...]错误:无法为注释类型 javax.jdo.annotations 创建声明。首要的关键。错误:无法为注释类型 javax.jdo.annotation.Persistent[...] 创建声明。任何的想法??谢谢!! =)
    • 你能发布完整的错误吗?细节不足以正确地说出任何事情
    • 是的,我编辑我的主要问题以添加逗号以及警告和错误,请看那里!谢谢!!
    【解决方案2】:

    我遇到了同样的错误。您收到此错误的原因是您必须为 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
    

    【讨论】:

      猜你喜欢
      • 2011-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-28
      相关资源
      最近更新 更多