Проблемы с «Клиентом веб-службы (CXF 2.)» в Spring Tool Suite 4 (JAVA) - PullRequest
1 голос
/ 22 марта 2019

Я использую Spring Tool Suite 4 с JAVA на JDK 1.8.0.181. У меня есть ссылка wsdl на сервер веб-службы, и я хочу создать отвечающий требованиям клиент веб-службы для моего проекта. Я настроил настройки CXF следующим образом:

CXF Preferences

Мои шаги по созданию веб-службы клиента:

  1. В моем проекте maven щелкните правой кнопкой мыши «New» -> «Other» -> «Web Service Client»,
  2. Я выбираю сервер Tomcat (ранее настроенный в 8.5),
  3. Я выбираю среду конфигурации (ранее настроенную на CXF),
  4. Копирую ссылку WSDL в соответствующее поле.

После копирования ссылки и после нескольких секунд ожидания STS возвращает следующую ошибку:

Could not retrieve the WSDL file "...wsdladresse.wsdl". Do you want to continueto wait for this file ?

Я нажал на продолжить и смог добавить пустой (на данный момент) XML-файл привязки. Как только процесс восстановления wsdl завершен, STS возвращает ошибку ниже:

WSDLToJava Error: Schema Error : cos-st-restricts.1.1 : Le type 'anySimpleType' étant non décomposable, sa valeur {base type definition}, 'anyType', doit être une définition de type simple atomique ou un type de données primitif intégré.

После некоторых исследований в Интернете я понял, что должен создать свои предложения по классам (здесь для типа anySimpleType) и добавить их в свой XML-файл привязки. Как узнать правильную структуру моего класса, чтобы убедиться, что STS учитывает ее при импорте WSDL?

Спасибо

Ответы [ 2 ]

0 голосов
/ 22 марта 2019

Я попробовал новое решение, используя NetBeans.После нескольких проблем со схемой xsd: мне пришлось добавить два xml-файла настроек:

  1. "XMLSchema.xsd"
  2. "custom.xml", который содержит следующие элементы:

<?xml version="1.0" encoding="UTF-8"?>
<bindings xmlns="http://java.sun.com/xml/ns/jaxb"
          xmlns:xsd="http://www.w3.org/2001/XMLSchema"
          xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
          version="2.0">

  <globalBindings>
    <xjc:simple />
  </globalBindings>

  <bindings scd="~xsd:complexType">
    <class name="ComplexTypeType"/>
  </bindings>

  <bindings scd="~xsd:simpleType">
    <class name="SimpleTypeType"/>
  </bindings>

  <bindings scd="~xsd:group">
    <class name="GroupType"/>
  </bindings>

  <bindings scd="~xsd:attributeGroup">
    <class name="AttributeGroupType"/>
  </bindings>

  <bindings scd="~xsd:element">
    <class name="ElementType"/>
  </bindings>

  <bindings scd="~xsd:attribute">
    <class name="attributeType"/>
  </bindings>
</bindings>

А также два dtd datatypes.dtd и XMLSchema.dtd.В первом поколении был опубликован каталог wsdl.,Затем я использовал его в опциях JAXB.Я попытался в последний раз, восстановление WSDL в классах JAVA, и я получаю ошибку ниже:

Created dir: C:\Users\DEV-04\Documents\NetBeansProjects\JavaApplication1\build\generated-sources\jaxb
Created dir: C:\Users\DEV-04\Documents\NetBeansProjects\JavaApplication1\build\generated\jaxbCache
Created dir: C:\Users\DEV-04\Documents\NetBeansProjects\JavaApplication1\build\generated\jaxbCache\PMS
Compiling file:/C:/Users/DEV-04/Documents/NetBeansProjects/JavaApplication1/xml-resources/jaxb/PMS/aspx/shprocess/v3/pmslinking.asmx.wsdl
C:\Users\DEV-04\Documents\NetBeansProjects\JavaApplication1\nbproject\xml_binding_build.xml:15: 
java.lang.IllegalArgumentException: can't parse argument number: ''http://java.sun.com/xml/ns/jaxb''
	at java.text.MessageFormat.makeFormat(MessageFormat.java:1429)
	at java.text.MessageFormat.applyPattern(MessageFormat.java:479)
	at java.text.MessageFormat.<init>(MessageFormat.java:362)
	at java.text.MessageFormat.format(MessageFormat.java:840)
	at com.sun.tools.xjc.Messages.format(Messages.java:54)
	at com.sun.tools.xjc.ModelLoader.buildDOMForest(ModelLoader.java:338)
	at com.sun.tools.xjc.ModelLoader.loadWSDL(ModelLoader.java:392)
	at com.sun.tools.xjc.ModelLoader.load(ModelLoader.java:171)
	at com.sun.tools.xjc.ModelLoader.load(ModelLoader.java:120)
	at com.sun.tools.xjc.XJC2Task._doXJC(XJC2Task.java:511)
	at com.sun.tools.xjc.XJC2Task.doXJC(XJC2Task.java:454)
	at com.sun.tools.xjc.XJC2Task.execute(XJC2Task.java:379)
	at com.sun.istack.tools.ProtectedTask.execute(ProtectedTask.java:103)
	at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
	at sun.reflect.GeneratedMethodAccessor102.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	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:435)
	at org.apache.tools.ant.Target.performTasks(Target.java:456)
	at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393)
	at org.apache.tools.ant.Project.executeTarget(Project.java:1364)
	at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
	at org.apache.tools.ant.Project.executeTargets(Project.java:1248)
	at org.apache.tools.ant.module.bridge.impl.BridgeImpl.run(BridgeImpl.java:286)
	at org.apache.tools.ant.module.run.TargetExecutor.run(TargetExecutor.java:555)
	at org.netbeans.core.execution.RunClassThread.run(RunClassThread.java:153)
Caused by: java.lang.NumberFormatException: For input string: "''http://java.sun.com/xml/ns/jaxb''"
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
	at java.lang.Integer.parseInt(Integer.java:569)
	at java.lang.Integer.parseInt(Integer.java:615)
	at java.text.MessageFormat.makeFormat(MessageFormat.java:1427)
	... 27 more
BUILD FAILED (total time: 15 seconds)
0 голосов
/ 22 марта 2019

Пожалуйста, вы можете добавить apache CXF в свой STS, и после этого в STS очень легко генерировать классы клиента веб-службы. Это можно сделать, выполнив следующие действия.

Щелкните правой кнопкой мыши по любому проекту-> СоздатьНовое Другое -> Веб-службы-> Клиент веб-службы-> Затем вставьте URL-адрес (или местоположение) wsdl в Определение службы-> Далее-> Готово

. Вы увидите, что сгенерированные классы находятся в папке src.

ПРИМЕЧАНИЕ. Без eclipse вы также можете генерировать клиентские классы из файла wsdl с помощью утилиты командной строки wsimport, поставляемой с JDK.

см. Ссылку 'https://help.eclipse.org/oxygen/index.jsp?topic=%2Forg.eclipse.jst.ws.cxf.doc.user%2Ftasks%2Fcreate_client.html' и' https://help.eclipse.org/neon/index.jsp?topic=%2Forg.eclipse.wst.wsdl.ui.doc.user%2Ftasks%2Ftimpwsdl.html'

...