从WSDL和XSD文件中生成与命名空间不同的包中的Web服务Java类

时间:2011-11-29 15:31:33

标签: java web-services namespaces xsd wsdl

我正在从现有的WSDL和XSD文件开发Java技术的Web服务。 Web服务与具有以“java:”开头的名称空间的现有客户端应用程序连接,例如, targetNamespace =“java:com.mycompany.project”我无法更改客户端使用的命名空间。我使用NetBeans作为我的IDE,它接受WSDL和XSD文件,通过jax-ws类自动生成。

因为名称空间以“java:”开头,所以应用程序服务器(我目前正在使用Glassfish,但可能会使用其他名称)拒绝部署代码,因为自定义程序包不能位于“java”下。包。错误是:

Error occurred during deployment: Exception while deploying the app [MyWebService] : Prohibited package name: java.com.mycompany.projecta. Please see server.log for more details.
/NetBeansProjects/MyWebService/nbproject/build-impl.xml:288: 
The module has not been deployed.
            at org.netbeans.modules.j2ee.deployment.devmodules.api.Deployment.deploy(Deployment.java:210)
            at org.netbeans.modules.j2ee.ant.Deploy.execute(Deploy.java:106)
            at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
            at sun.reflect.GeneratedMethodAccessor488.invoke(Unknown Source)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
            at java.lang.reflect.Method.invoke(Method.java:597)
            at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
            at org.apache.tools.ant.Task.perform(Task.java:348)
            at org.apache.tools.ant.Target.execute(Target.java:390)
            at org.apache.tools.ant.Target.performTasks(Target.java:411)
            at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
            at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
            at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
            at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
            at org.apache.tools.ant.module.bridge.impl.BridgeImpl.run(BridgeImpl.java:284)
            at org.apache.tools.ant.module.run.TargetExecutor.run(TargetExecutor.java:539)
            at org.netbeans.core.execution.RunClassThread.run(RunClassThread.java:153)

要解决此问题,我尝试修改服务器端的WSDL和XSD文件,以在其他程序包中创建自动生成的类。我在WSDL中添加了以下内容:

<definitions... >
    ...
    <jaxws:bindings>
        <jaxws:package name="com.mycompany.projecta"/>
    </jaxws:bindings>
</definitions>

现在在“com.mycompany.projecta”包中生成了一些类,但大多数都不是。我试过添加......

<xsd:schemaBindings>
    <xsd:package name="com.mycompany.projecta" />
</xsd:schemaBindings>

...元素,但它们似乎不起作用。它们被添加到WSDL中的“xsd:schema&gt; xsd:annotation”中。我已经在网上阅读了很多关于该主题的信息,并尝试了其他替代方案,但我没有取得任何成功。

您能否就我可能做错的事情向我提供一些指导或见解,以便我可以在“com.mycompany.projecta”包中生成我的课程并继续我的项目?

谢谢!

1 个答案:

答案 0 :(得分:1)

我相信我已经解决了我的问题。我解开了上面的所有内容,并在我的jaxws-build.xml文件中添加了一个“package”属性到我的任务中(我使用ANT来构建项目):

<wsimport package="com.mycompany.projecta" ... >

这会生成“com.mycompany.projecta”下的所有类。

我应该补充一点,我发现这是一个选项:

http://jax-ws.java.net/nonav/2.1.1/docs/wsimportant.html