2 u010198718 u010198718 于 2016.03.08 19:46 提问

求助:无法使用JAX-WS开发webservice项目

问题:

在使用JAX-WS以bottom-up方式开发webservice项目时,基于某一个java**类SOSOpenAPI**创建时,报错:An internal error occurred during: "Generating JAX-WS Web Services".
Unable to create JAXBContext
错误的详细信息如下:
javax.xml.ws.WebServiceException: Unable to create JAXBContext
at com.sun.xml.ws.model.AbstractSEIModelImpl.createJAXBContext(AbstractSEIModelImpl.java:158)
at com.sun.xml.ws.model.AbstractSEIModelImpl.postProcess(AbstractSEIModelImpl.java:87)
at com.sun.xml.ws.model.RuntimeModeler.buildRuntimeModel(RuntimeModeler.java:262)
at com.sun.tools.ws.wscompile.WsgenTool.buildModel(WsgenTool.java:225)
at com.sun.tools.ws.wscompile.WsgenTool.run(WsgenTool.java:124)
at com.genuitec.eclipse.ws.jaxws.JaxWSBUJob.wsGen(JaxWSBUJob.java:229)
at com.genuitec.eclipse.ws.jaxws.JaxWSBUJob.run(JaxWSBUJob.java:125)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)
Caused by: java.security.PrivilegedActionException: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
java.lang.StackTraceElement does not have a no-arg default constructor.
this problem is related to the following location:
at java.lang.StackTraceElement
at public java.lang.StackTraceElement[] java.lang.Throwable.getStackTrace()
at java.lang.Throwable
at private java.lang.Throwable[] jaxws.IOExceptionBean.suppressed
at jaxws.IOExceptionBean

at java.security.AccessController.doPrivileged(Native Method)
at com.sun.xml.ws.model.AbstractSEIModelImpl.createJAXBContext(AbstractSEIModelImpl.java:148)
... 7 more

Caused by: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
java.lang.StackTraceElement does not have a no-arg default constructor.
this problem is related to the following location:
at java.lang.StackTraceElement
at public java.lang.StackTraceElement[] java.lang.Throwable.getStackTrace()
at java.lang.Throwable
at private java.lang.Throwable[] jaxws.IOExceptionBean.suppressed
at jaxws.IOExceptionBean

at com.sun.xml.bind.v2.runtime.IllegalAnnotationsException$Builder.check(IllegalAnnotationsException.java:102)
at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:438)
at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:286)
at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:139)
at com.sun.xml.bind.api.JAXBRIContext.newInstance(JAXBRIContext.java:105)
at com.sun.xml.ws.model.AbstractSEIModelImpl$1.run(AbstractSEIModelImpl.java:153)
at com.sun.xml.ws.model.AbstractSEIModelImpl$1.run(AbstractSEIModelImpl.java:149)
... 9 more

** SOSOpenAPI.java**代码如下:

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.zip.GZIPOutputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException;

import org.w3c.dom.Document;
import org.xml.sax.SAXException;

import com.sensorweb.sos.request.RequestOperator;
import com.sensorweb.sos.response.ISosResponse;

/**

  • WebService入口函数
  • */
    public class SOSOpenAPI {
    private DocumentBuilderFactory docBuildFactory; //XML解析工厂类
    private RequestOperator reop; //请求操作类

    /** 无参数构造函数 */
    public SOSOpenAPI() {
    this.docBuildFactory = DocumentBuilderFactory.newInstance();
    this.docBuildFactory.setNamespaceAware(true);
    this.reop = new RequestOperator();
    }

    /** SOSService中的核心方法

    • 该方法在使用SOSService中的功能时被调用
    • 通过inputString返回相应的响应结果
    • @param inputString String
    • @return result byte[]
    • */
      public byte[] getResponse(String inputString) throws IOException {
      ISosResponse sosResp = null; //存放响应结果
      Document fullRequestDoc = null; //存储解析的XML请求
      byte[] bytes = null; //以字节数组的形式存储最后结果
      try {
      synchronized (this.docBuildFactory) {
      DocumentBuilder docBuilder = this.docBuildFactory
      .newDocumentBuilder();
      fullRequestDoc = docBuilder.parse(new ByteArrayInputStream(
      inputString.getBytes()));
      }
      } catch (ParserConfigurationException pce) {
      System.out.println("Error while parsing request!" + pce);

      } catch (SAXException saxe) {
      System.out.println("Error while parsing request!" + saxe);

      }
      fullRequestDoc.getDocumentElement().normalize();
      sosResp = this.reop.doPostOperation(inputString);//调用全局变量reop的doPostOperation方法
      OutputStream out = null;
      GZIPOutputStream gzip = null;
      ContentRs cr = new ContentRs();
      try {
      String contentType = sosResp.getContentType();
      int contentLength = sosResp.getContentLength();
      bytes = sosResp.getByteArray();//将响应结果转化为字节数据存储
      } catch (IOException ioe) {

      } catch (TransformerException ioe) {
      }
      return bytes; //返回结果
      }

}


而使用与SOSOpenAPI.java在同一包下的**ContentRs.java**作为基类就可以创建webservice,**ContentRs.java**的代码如下:

/**

  • 该类是一个JavaBean,用于存储最后返回的结果

  • */
    public class ContentRs {
    private String contentType; //返回结果的类型
    private int contentLength; //返回结果的大小
    private byte[] bytes; //返回的结果

    public String getContentType() {
    return contentType;
    }

    public void setContentType(String contentType) {
    this.contentType = contentType;
    }

    public int getContentLength() {
    return contentLength;
    }

    public void setContentLength(int contentLength) {
    this.contentLength = contentLength;
    }

    public byte[] getBytes() {
    return bytes;
    }

    public void setBytes(byte[] bytes) {
    this.bytes = bytes;
    }

}


已做的尝试:

更改项目的jdk为jdk1.8.0和jdk1.7.0时,仍然报错

求助:

哪位前辈对此类问题有解决方案,求指导啊

2个回答

u010198718
u010198718   2016.03.08 21:58

把SOSOpenAPI类的getResponse()方法中的throws IOException 去掉,应该是JAX-WS要求webmethod不能抛出异常。

huto2
huto2   2017.04.28 15:00

抛出 IOException ,出错,没有这个构造方法。

WebService, 如果以jdk1.6启动可以抛异常,如果以jdk1.7启动,就不让抛异常了。

你可以将服务器的jdk切换到1.6试试。也可以将接口与实现类抛出的异常删除掉,用当前JDK启动。

我刚刚也遇到这个问题了。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
JAX-WS:创建简单的webservice
转:http://mj4d.iteye.com/blog/1721681 1、什么是JAX-WS JAX-WS (JavaTM API for XML-Based Web Services)规范是一组XML web services的JAVA API。JAX-WS允许开发者可以选择RPC-oriented或者message-oriented 来实现自己的web serv
将jax-ws webservice集成到web项目中
首先, 为了我们这个WS的实验能够顺利的完成,最好能到官网上下载到JAX-WS工具的完整版。下载到的是一个jar文件,需要在Windows命令行下运行jar命令解压安装的,比如我这边有个JAXWS2.1.1_20070501.jar。安装后得到一个目录,其中有个lib下有许多jar文件。bin目录下有几个命令,很有用的,如wsgen和wsimport等,当然,我提过,这两个命令在JDK6中已经有的
eclipse中使用jax-ws进行 webservice开发
java的JRE中封装了JAX-WS的jar包,1.6以上可以直接使用,很方便. 首先创建servcie类 import javax.jws.WebMethod; import javax.jws.WebService; import javax.jws.soap.SOAPBinding; import javax.jws.soap.SOAPBinding.Style; @WebServ
使用JAX-WS开发简单webservice
webservice的技术有很多,现在流行的有JAX-WS、XFile、CXF、Axis1、Axis2等。不过JAX-WS是webservice技术最轻量级的,不需要引入额外jar包。  在服务器端,用户只需要通过Java语言定义远程调用所需要实现的接口SEI(service endpoint interface),并提供相关的实现,通过调用JAX-WS的服务发布接口就可以将其发布为WebSer
JAX-WS开发webservice遇到的问题解决
最近公司项目要求用webservice开发,之前也没有做过相关的工作,因此也是赶紧在网上学习。 【WebService学习过程记录(一)】照猫画虎---运行示例:博主经过学习别人的经验,说明了几个问题,但仍不是自己遇到的。 WebService学习之路一:学习了WebService的基础原理,博主通过视频学习。 JAX-WS:创建简单的webs
利用jax-ws发布WebService
上周项目中要实现一个对外提供服务接口的功能。真的是累心,不过最终也是完成了。现在分享一下。就是利用JAX-WS来发布WebService.具体步骤如下: 1.编写接口类。使用@WebService注解标注接口,使用@WebMethod注解标注接口中定义的所有方法。jax-ws发布webservice可以实现List类型和Map类型的,而axis对于List类型的返回值确无能为力。 2.编写接
基于JAX-WS的webService开发实例
一个简单的基于JAX-WS的webService开发实例。
JAXWS 开发webService ,使用spring注入service类时,无法注入,报空指针
解决方法: 实现类需要extends SpringBeanAutowiringSupport ,举例如下: public class SyncUsersImpl extends SpringBeanAutowiringSupport implements ISyncUsers{   @Autowired(required=true)   private CsrService csrServ
基于JAX-WS的WebService在Spring框架中的实现与调用
基于JAX-RS的WebService的在Spring框架中的实现与调用基于JAX-RS的WebService的在Spring框架中的实现与调用 一服务端的实现 1配置webxml 2配置spring-servletxml 3服务端接口 EMRServerjava 4服务端接口实现 EMRServerImpjava 二在服务端编写测试类 三在客户端调用接口 一、服务端的实现1、配置web.xml <
WebService学习之旅(三)JAX-WS与Spring整合发布WebService
Spring本身就提供了对JAX-WS的支持,有兴趣的读者可以研究下Spring的Spring-WS项目,项目地址: http://docs.spring.io/spring-ws/sites/1.5/downloads/releases.html 基于Spring IoC容器发布Web服务,能够大大降低WebService实现过程,也能够更好的与企业级应用进行整合,本文將和大家介绍如何基于Sp