JAvaがJAX-WSを使用してwebserviceを書く場合Unable to create JAXBContext
3484 ワード
webserviceは、web開発者として身につけなければならない技術の一つであり、そのメリットはここではあまり言わないが、MyEclipseにはwebserviceを生成する方法が付属しており、JAX-WSを使用しているが、私が間違っていなければjavaEE 5.0、JDK 1.5以上が必要であり、それを理解したらインタフェース方法を書き始める.好き放題.意外にもMyEclipseでwebserviceを生成する際にエラーが発生し、生成できなくなり、エラーメッセージは以下の通りである"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:224)
at com.genuitec.eclipse.ws.jaxws.JaxWSBUJob.run(JaxWSBUJob.java:124)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
Caused by: java.security.PrivilegedActionException: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 2 counts of IllegalAnnotationExceptions
java.sql.ResultSet is an interface, and JAXB can't handle interfaces.
this problem is related to the following location:
at java.sql.ResultSet
at private java.sql.ResultSet com.bjjdsy.service.jaxws.TestABCResponse._return
at com.bjjdsy.service.jaxws.TestABCResponse
java.sql.ResultSet does not have a no-arg default constructor.
this problem is related to the following location:
at java.sql.ResultSet
at private java.sql.ResultSet com.bjjdsy.service.jaxws.TestABCResponse._return
at com.bjjdsy.service.jaxws.TestABCResponse
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: 2 counts of IllegalAnnotationExceptions
java.sql.ResultSet is an interface, and JAXB can't handle interfaces.
this problem is related to the following location:
at java.sql.ResultSet
at private java.sql.ResultSet com.bjjdsy.service.jaxws.TestABCResponse._return
at com.bjjdsy.service.jaxws.TestABCResponse
java.sql.ResultSet does not have a no-arg default constructor.
this problem is related to the following location:
at java.sql.ResultSet
at private java.sql.ResultSet com.bjjdsy.service.jaxws.TestABCResponse._return
at com.bjjdsy.service.jaxws.TestABCResponse
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.(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
本当に憂鬱です.特にwebserviceを始めたばかりの頃です.スタック情報をよく読んでみると、ResultSetはインタフェースだと言っていましたが、JAXBはインタフェースを処理できませんでした.ネット上でJAX-WSは基本データ型、int、Stringなどしかサポートしていないと言っていたのを覚えていますが、実はそうではありません.JAXがサポートしているデータ型は多く、List、HashMap、カスタムオブジェクトなどどちらも問題ありませんが、インタフェースを処理できないだけなので、メソッドのパラメータや戻り値にインタフェースがなければいいのです.