Код: Выделить всё
org.springframework.boot:spring-boot-starter-web-services
com.sun.xml.ws:jaxws-rt:4.0.2
com.sun.xml.bind:jaxb-xjc:4.0.5
com.sun.xml.bind:jaxb-impl:4.0.5
org.jvnet.jaxb:jaxb-tools-project:4.0.11
wsdl4j:wsdl4j
< /code>
У нас есть проект, который подключается к мыльной службе нескольких внешних конечных точек и загрузки информации из этих конечных точек. Это программное обеспечение, кажется, работает, но я хочу написать тестирование интеграции, используя самозаписную проверку тестируемого и внедрения для этого проекта. < /P>
(это означает, что я не хочу изменять фактический продуктивный клиент /Unmarshaller в этом клиенте.) < /P>
У меня есть файл wsdl (wsdl-файл (a *.asmx < /code, что является PRACISE), который будет при условии, что при условии, что при условии, что можно было при условии wsdl (a *. (не веб-сервис-провайдеры сами, но на несколько уровней «над ними»). Я хочу написать свой тестовый сервер и мыло-папсервис, используя Spring-Webservices, используя этот WSDL. I have created Java Classes from that WSDL (the extracted XSD Schema) using wsimportThe XSD Schema of the WSDL file contains a Value element without any type in one of it's complex-types, like this:
Код: Выделить всё
...
...
то, что я пробовал до сих пор:
1. /> Моей первой попыткой было определить внешний файл привязки, чтобы сказать Jaxb карту Double < /code> в нужный кусок XML, при этом сохраняя полиморфную природу этого тега, используя что -то вроде этого: < /p>
Код: Выделить всё
Код: Выделить всё
parsing a schema...
[ERROR] compiler was unable to honor this javaType customization. It is attached to a wrong place, or its inconsistent with other bindings.
line 22 of file:/home/user/git/foo/bar/src/main/resources/wsdl/binding.xjb
[ERROR] (the above customization is attached to the following location in the schema)
line 195 of file:/home/user/git/foo/bar/test-server/src/main/resources/wsdl/Schema.xsd
Failed to parse a schema.
< /code>
Я не совсем уверен, почему это связывание Javatype кажется не в том месте, но моя рабочая теория заключаетсяsimpleType< /code> /complextype < /code>) и не для тегов без типа.
Пример, который я видел в Интернете, применил этот джаватип связывается с тегом SimpleType < /code> в схеме,
, что я не могу сделать здесь, потому что у этого тега нет типа. jakarta.xml.bind.annotation.adapters.xmladapter.xmladapter Код: Выделить всё
...
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
...
...
Код: Выделить всё
JAXBElement element = new JAXBElement(new QName(NAMESPACE, "Value"), Double.class, inputDouble);
element.setValue(inputDouble.toString());
return element;
Это, кажется, несколько работает, но терпит неудачу, потому что:
- a). Tag и
- b) Unmarshaller в клиенте разрешил это в экземпляр com.sun.org.apache.xerces.internal.dom.elementnsimpl (с типом = null ), вместо двойного объекта непосредственно. При использовании клиента с «реальной» внешней службой, двойной производится непосредственно в этом месте (от JAXB, может быть, из -за этого недостающего типа информации?).
Код: Выделить всё
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument()
Element element = doc.createElementNS(NAMESPACE, "Value");
element.setAttributeNS(XSI_NS, "type", "xsd:double");
element.setTextContent(input.toString());
return element;
Подробнее здесь: https://stackoverflow.com/questions/797 ... 2-34-value
Мобильная версия