Создание классов Java веб-службы в пакете, отличном от пространства имен из файлов WSDL и XSD - PullRequest
2 голосов
/ 29 ноября 2011

Я занимаюсь разработкой веб-службы на основе технологий Java из существующих файлов WSDL и XSD.Веб-служба взаимодействует с существующим клиентским приложением, которое имеет пространства имен, начинающиеся с «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>

... элементов, но они не работают.Они были добавлены в «xsd: schema> xsd: annotation» в WSDL.Я прочитал много информации в Интернете по этой теме и пробовал другие варианты, но я не имел никакого успеха.

Не могли бы вы дать мне некоторое руководство или понимание того, что я могу делать неправильно, чтобы я мог генерировать свои классы в пакете "com.mycompany.projecta" и продолжать свой проект?

Спасибо!

1 Ответ

1 голос
/ 01 декабря 2011

Мне кажется, я решил свою проблему. Я отменил все вышеперечисленное и добавил атрибут «пакет» к моей задаче в моем файле jaxws-build.xml (я использую ANT для сборки проекта):

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

Это сгенерировало все классы в "com.mycompany.projecta".

Я должен добавить, что обнаружил, что это был вариант, прочитав это:

http://jax -ws.java.net / nonav / 2.1.1 / документы / wsimportant.html

...