Web services 使用wsgen和@Interceptors会导致-->;不支持的major.minor版本51.0

Web services 使用wsgen和@Interceptors会导致-->;不支持的major.minor版本51.0,web-services,maven,jakarta-ee,interceptor,wsgen,Web Services,Maven,Jakarta Ee,Interceptor,Wsgen,我在ear上打包了一个JavaEE项目。ear包含一个Jar,我在其中打包@stateless EJB和其他非托管类(我的模型、UTIL等)。对于其中一些EJB,我使用Jax Ws将其功能公开为web服务 我尝试使用AOP创建一个日志机制,所以我将@Interceptors注释放在我的Jax Ws支持的EJB中。问题是,当我尝试使用maven编译/build/package时,我收到以下异常。当我将@Interceptors注释放在它编译和运行时没有任何问题的非Jax-ws注释ejb中时,问题似

我在ear上打包了一个JavaEE项目。ear包含一个Jar,我在其中打包@stateless EJB和其他非托管类(我的模型、UTIL等)。对于其中一些EJB,我使用Jax Ws将其功能公开为web服务

我尝试使用AOP创建一个日志机制,所以我将@Interceptors注释放在我的Jax Ws支持的EJB中。问题是,当我尝试使用maven编译/build/package时,我收到以下异常。当我将@Interceptors注释放在它编译和运行时没有任何问题的非Jax-ws注释ejb中时,问题似乎是特定于wsgen原因的。我使用JAva build 1.6.0_41-b02

我还试图找到一个旧版本的javax.interceptor-api(可能是用Java1.6编译的,因为major.minor版本51.0意味着它是用JSE7编译的,如果我没有弄错的话),但似乎1.2是旧版本

[ERROR] Failed to execute goal org.jvnet.jax-ws-commons:jaxws-maven-plugin:2.2:wsgen (MyWebService) on pro
ect my-ws-ejb: Failed to execute wsgen: javax/interceptor/Interceptors : Unsupported major.minor version 51.0 -> [Help
1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.jvnet.jax-ws-commons:jaxws-maven-plu
in:2.2:wsgen (MyWebService) on project my-ws-ejb: Failed to execute wsgen
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:217)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
        at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
        at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
        at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
Caused by: org.apache.maven.plugin.MojoExecutionException: Failed to execute wsgen
        at org.jvnet.jax_ws_commons.jaxws.AbstractWsGenMojo.execute(AbstractWsGenMojo.java:148)
        at org.jvnet.jax_ws_commons.jaxws.MainWsGenMojo.execute(MainWsGenMojo.java:95)
        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
        ... 19 more
Caused by: java.lang.UnsupportedClassVersionError: javax/interceptor/Interceptors : Unsupported major.minor version 51.

        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:249)
        at sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:95)
        at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:107)
        at sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:31)
        at sun.reflect.annotation.AnnotationParser.parseSig(AnnotationParser.java:370)
        at sun.reflect.annotation.AnnotationParser.parseAnnotation(AnnotationParser.java:181)
        at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:69)
        at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:52)
        at java.lang.Class.initAnnotationsIfNecessary(Class.java:3079)
        at java.lang.Class.getAnnotation(Class.java:3038)
        at com.sun.tools.ws.wscompile.WsgenOptions.validateEndpointClass(WsgenOptions.java:240)
        at com.sun.tools.ws.wscompile.WsgenOptions.validate(WsgenOptions.java:222)
        at com.sun.tools.ws.wscompile.WsgenTool.run(WsgenTool.java:123)
        at com.sun.tools.ws.WsGen.doMain(WsGen.java:74)
        at org.jvnet.jax_ws_commons.jaxws.AbstractWsGenMojo.execute(AbstractWsGenMojo.java:142)
        ... 22 more
我的pom(部分):


您是否尝试用
webbeans.xml
代替
annotation
?如果没有,请检查。可能是maven插件无法识别此注释

类级声明应类似于以下代码:

<myapp:MyWebServiceBean>
   <myfwk:LoggingAopService/>
</myapp:MyWebServiceBean>

此拦截器需要启用:

<Interceptors>
    <myfwk:LoggingAopService/>
</Interceptors>


我没有测试这些代码。

您发送的web-beans.xml声明是否特定于jboss?我使用web逻辑,发现可以通过在META-INF/beans.xml中添加以下xml来启用拦截器

<interceptors>
    <class>org.samples.LoggingInterceptor</class>
</interceptors>

org.samples.LoggingInterceptor

我将尝试xml声明,但由于我很匆忙,我利用了Jax Ws框架(使用@HandlerChain annotation)本机提供的处理程序功能来“拦截”web服务请求和响应。

我还尝试使用@InterceptorBinding方式创建新的注释:

@Inherited
    @InterceptorBinding
    @Retention(RUNTIME)
    @Target({ METHOD, TYPE })
    public @interface Logging {
    }



@Interceptor
    @Logging
    public class LoggingInterceptor {
        @AroundInvoke
        public Object intercept(InvocationContext context) throws Exception {...}



 @Logging
    @WebService(serviceName = "MyWebService", portName = "MyWebService",
    targetNamespace = "...")
    @Stateless(name = "MyWebServiceBean", mappedName = "ejb/seb/MyWebServiceBean")
    public class MyWebServiceBean implements MyWebService
    {....}
但这也不能编译,我收到了相同的错误:

[ERROR] Failed to execute goal org.jvnet.jax-ws-commons:jaxws-maven-plugin:2.2:w
sgen (EDocWebService) on project eDoc-ws-ejb: Failed to execute wsgen: javax/int
erceptor/InterceptorBinding : Unsupported major.minor version 51.0 -> [Help 1]
可能在这种情况下应该使用ejb-jar.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <ejb-jar xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      version="3.0" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd">
      <interceptors>
        <interceptor>
          <interceptor-class>com.mypackage.LoggingInterceptor </interceptor-class>
        </interceptor>
      </interceptors>

      <assembly-descriptor>
        <interceptor-binding>
          <ejb-name>MyWebServiceBean</ejb-name>
          <interceptor-class>com.package.Interceptor</interceptor-class>
        </interceptor-binding>
      </assembly-descriptor>
 </ejb-jar>

com.mypackage.LoggingInterceptor
MyWebServiceBean
拦截程序
[ERROR] Failed to execute goal org.jvnet.jax-ws-commons:jaxws-maven-plugin:2.2:w
sgen (EDocWebService) on project eDoc-ws-ejb: Failed to execute wsgen: javax/int
erceptor/InterceptorBinding : Unsupported major.minor version 51.0 -> [Help 1]
    <?xml version="1.0" encoding="UTF-8"?>
    <ejb-jar xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      version="3.0" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd">
      <interceptors>
        <interceptor>
          <interceptor-class>com.mypackage.LoggingInterceptor </interceptor-class>
        </interceptor>
      </interceptors>

      <assembly-descriptor>
        <interceptor-binding>
          <ejb-name>MyWebServiceBean</ejb-name>
          <interceptor-class>com.package.Interceptor</interceptor-class>
        </interceptor-binding>
      </assembly-descriptor>
 </ejb-jar>