相关疑难解决方法(0)

使用WebParam不允许使用XmlElement注释

我在webservice中有一个方法,具有以下签名:

@WebResult(name="purchaseId") public int CreatePurchase(
            @XmlElement(required=true)
            @WebParam(name = "item") String item {
  ...
}
Run Code Online (Sandbox Code Playgroud)

在我看来(根据我发现的信息),这应该工作.不幸的是,我在编译时收到以下错误消息:

The annotation @XmlElement is disallowed for this location
Run Code Online (Sandbox Code Playgroud)

有谁知道如何解决这个问题?

java xml web-services jax-ws

16
推荐指数
1
解决办法
2万
查看次数

在jdk1.6中使用Endorsed目录的确切方法是什么

我想将我的jaxws升级到2.2(jdk1.6与jaxws 2.1捆绑在一起).我的jdk是(我没有安装公共jre):

java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode)
Run Code Online (Sandbox Code Playgroud)

jaxws自己的文档中,他们解释了如何做到这一点:

解决此问题的一种方法是将jaxws-api.jar和jaxb-api.jar复制到JRE背书目录中,这是 $JAVA_HOME/lib/endorsed (or $JDK_HOME/jre/lib/endorsed)

但我不确定这对我的安装有什么影响.对于初学者我只定义了%JAVA_HOME%.文件夹$JAVA_HOME/lib/endorsed是不存在的,所以我创建并复制了两个罐子.但是,如果我这样做(wsgen是来自jaxws的工具)

wsgen -version
Run Code Online (Sandbox Code Playgroud)

我还是得到:

JAX-WS RI 2.1.6 in JDK 6
Run Code Online (Sandbox Code Playgroud)

我也试过创建文件夹JAVA_HOME\jre\lib\endorsed(请注意,在文档中他们说JDK_HOME,但因为我只有JAVA_HOME,所以我使用了这个路径).仍然是相同的wsgen输出.

我的问题是:

  1. doc页面中JAVA_HOME和JDK_HOME有什么区别?什么重要或只有两种方式来引用JAVA_HOME?
  2. 'wsgen -version'是检查使用的jaxws版本的有效方法,还是总是在原始jdk中调用exe,但这并不意味着将使用支持的jar?
  3. 有人知道在jdk.16中安装jaxws2.2的非常详细的步骤吗?

我发现这篇帖子对我所看到的内容有一些暗示

java jax-ws endorsed

8
推荐指数
2
解决办法
4万
查看次数

创建JAXB Context的JAXBException

当我将应用程序作为独立的Java程序运行时,它运行良好.当我将它作为applet运行时,它会抛出带有以下stacktrace的JAXBException.

javax.xml.bind.JAXBException: jaxb.properties in package com/test/package does not contain the javax.xml.bind.context.factory property.
    at javax.xml.bind.ContextFinder.find(Unknown Source)
    at javax.xml.bind.JAXBContext.newInstance(Unknown Source)
    at javax.xml.bind.JAXBContext.newInstance(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

当我添加一个jaxb.properties时,我收到以下错误 -

javax.xml.bind.JAXBException
 - with linked exception:
[java.lang.NoSuchMethodException: com.sun.xml.internal.ws.developer.JAXBContextFactory.createContext([Ljava.lang.Class;, java.util.Map)]
    at javax.xml.bind.ContextFinder.newInstance(Unknown Source)
    at javax.xml.bind.ContextFinder.newInstance(Unknown Source)
    at javax.xml.bind.ContextFinder.find(Unknown Source)
    at javax.xml.bind.JAXBContext.newInstance(Unknown Source)
    at javax.xml.bind.JAXBContext.newInstance(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

我将以下jar添加到classpath中 -

  • JAXWS-RT-2.2.1
  • JSR311的API-1.1.1
  • 球衣核-1.2
  • 新泽西州的客户 - 1.2

导致此错误的原因.我错过了任何依赖项.

编辑:我在浏览器和开发环境中使用Java 7 u 59.

java applet jaxb java-web-start

6
推荐指数
1
解决办法
2652
查看次数

如何让Ant在javac中使用JAXB 2.2.x而不是Java 6 SE JAXB类?

我正在更新遗留应用程序以使用Java 6 SE而不是Java 5 SE.该应用程序使用JAXB,在Java 5 SE下,它在类路径上有JAXB参考实现jar.当我转到Java 6 SE(更新38)时,我遇到了一些问题(参见链接的Stackoverflow问题),我在一些帮助下解决了这个问题.

因此,导致问题的下一件事是项目Ant构建脚本.当Ant编译任务执行时,它会获取Java 6 SE附带的JAXB的嵌入式版本,而不是我在类路径中包含的jar版本(JAXB 2.2.6版本).我相信Java 6 SE包含JAXB 2.1.x. 这导致编译时错误,如下所示:

[javac] location: @interface javax.xml.bind.annotation.XmlElementRef
[javac]     @XmlElementRef(name = "abbrev", type = JAXBElement.class, required = false)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,JAXB 2.1.x中的@XmlElementRef不存在'required'属性,但它在2.2.x中存在.

如何更改我的Ant构建脚本,以便从构建类路径中获取JAXB 2.2.6 jar而不是Java 6 SE JDK中包含的类?


更新:解决方案基于彼得的答案

<target name="compile" depends="clean">
    <javac deprecation="on" 
            classpathref="prj.classpath" 
            srcdir="${src}" 
            destdir="${build.dir}" 
            debug="on" 
            debuglevel="lines,vars,source" 
            source="1.6">
        <compilerarg value="-Djava.endorsed.dirs=${lib.ext.dir}/jaxb"/>
    </javac>
</target>
Run Code Online (Sandbox Code Playgroud)

java ant jaxb classpath

2
推荐指数
1
解决办法
4135
查看次数

标签 统计

java ×4

jax-ws ×2

jaxb ×2

ant ×1

applet ×1

classpath ×1

endorsed ×1

java-web-start ×1

web-services ×1

xml ×1