powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / JAX-WS и CDATA
16 сообщений из 16, страница 1 из 1
JAX-WS и CDATA
    #35785293
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Создала веб-сервис при помощи JAX-WS.

У сервиса есть метод, который возвращает объект документ.

В объекте документ имеются поля:

private String description;
private String content;

Эти поля никак специально не проаннотированы.

И description, и content могут содержать html-теги.


Когда я обращаюсь к сервису при помощи soapUI, я получаю документ, где

content передается как CDATA (что меня вполне устраивает),
а в description все < в тегах заменяются на <


Подскажите, пожалуйста, что может влиять на неодинаковое представление String c html-разметкой?
Хотелось бы и для description, и для content получать CDATA.
...
Рейтинг: 0 / 0
JAX-WS и CDATA
    #35785349
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsdl есть?
...
Рейтинг: 0 / 0
JAX-WS и CDATA
    #35785432
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
<?xml version="1.0" encoding="UTF-8"?>
<!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.4-b01-. -->
<!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.4-b01-. -->
<definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns=" ... " xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace=" ... " name="KnowledgeBaseServiceService">
<types>
<xsd:schema>
<xsd: import  namespace=" ... " schemaLocation=" ..."></xsd: import >
</xsd:schema>
</types>
<message name="getCategoryById">
<part name="parameters" element="tns:getCategoryById"></part>
</message>
<message name="getCategoryByIdResponse">
<part name="parameters" element="tns:getCategoryByIdResponse"></part>
</message>
<message name="getCategoriesByParentId">
<part name="parameters" element="tns:getCategoriesByParentId"></part>
</message>
<message name="getCategoriesByParentIdResponse">
<part name="parameters" element="tns:getCategoriesByParentIdResponse"></part>
</message>
<message name="getDocumentById">
<part name="parameters" element="tns:getDocumentById"></part>
</message>
<message name="getDocumentByIdResponse">
<part name="parameters" element="tns:getDocumentByIdResponse"></part>
</message>
<message name="getDocumentsByCategoryId">
<part name="parameters" element="tns:getDocumentsByCategoryId"></part>
</message>
<message name="getDocumentsByCategoryIdResponse">
<part name="parameters" element="tns:getDocumentsByCategoryIdResponse"></part>
</message>
<message name="getFileById">
<part name="parameters" element="tns:getFileById"></part>
</message>
<message name="getFileByIdResponse">
<part name="parameters" element="tns:getFileByIdResponse"></part>
</message>
<message name="searchDocuments">
<part name="parameters" element="tns:searchDocuments"></part>
</message>
<message name="searchDocumentsResponse">
<part name="parameters" element="tns:searchDocumentsResponse"></part>
</message>
<portType name="KnowledgeBaseService">
<operation name="getCategoryById">
<input message="tns:getCategoryById"></input>
<output message="tns:getCategoryByIdResponse"></output>
</operation>
<operation name="getCategoriesByParentId">
<input message="tns:getCategoriesByParentId"></input>
<output message="tns:getCategoriesByParentIdResponse"></output>
</operation>
<operation name="getDocumentById">
<input message="tns:getDocumentById"></input>
<output message="tns:getDocumentByIdResponse"></output>
</operation>
<operation name="getDocumentsByCategoryId">
<input message="tns:getDocumentsByCategoryId"></input>
<output message="tns:getDocumentsByCategoryIdResponse"></output>
</operation>
<operation name="getFileById">
<input message="tns:getFileById"></input>
<output message="tns:getFileByIdResponse"></output>
</operation>
<operation name="searchDocuments">
<input message="tns:searchDocuments"></input>
<output message="tns:searchDocumentsResponse"></output>
</operation>
</portType>
<binding name="KnowledgeBaseServicePortBinding" type="tns:KnowledgeBaseService">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"></soap:binding>
<operation name="getCategoryById">
<soap:operation soapAction="getCategoryById"></soap:operation>
<input>
<soap:body use="literal"></soap:body>
</input>
<output>
<soap:body use="literal"></soap:body>
</output>
</operation>
<operation name="getCategoriesByParentId">
<soap:operation soapAction="getCategoriesByParentId"></soap:operation>
<input>
<soap:body use="literal"></soap:body>
</input>
<output>
<soap:body use="literal"></soap:body>
</output>
</operation>
<operation name="getDocumentById">
<soap:operation soapAction="getDocumentById"></soap:operation>
<input>
<soap:body use="literal"></soap:body>
</input>
<output>
<soap:body use="literal"></soap:body>
</output>
</operation>
<operation name="getDocumentsByCategoryId">
<soap:operation soapAction="getDocumentsByCategoryId"></soap:operation>
<input>
<soap:body use="literal"></soap:body>
</input>
<output>
<soap:body use="literal"></soap:body>
</output>
</operation>
<operation name="getFileById">
<soap:operation soapAction="getFileById"></soap:operation>
<input>
<soap:body use="literal"></soap:body>
</input>
<output>
<soap:body use="literal"></soap:body>
</output>
</operation>
<operation name="searchDocuments">
<soap:operation soapAction="searchDocuments"></soap:operation>
<input>
<soap:body use="literal"></soap:body>
</input>
<output>
<soap:body use="literal"></soap:body>
</output>
</operation>
</binding>
<service name="KnowledgeBaseServiceService">
<port name="KnowledgeBaseServicePort" binding="tns:KnowledgeBaseServicePortBinding">
<soap:address location=" ... "></soap:address>
</port>
</service>
</definitions>



<?xml version="1.0" encoding="UTF-8"?>
<!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.4-b01-. -->
<xs:schema xmlns:tns=" ... " xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0" targetNamespace=" ... ">

<xs:element name="getCategoriesByParentId" type="tns:getCategoriesByParentId"></xs:element>

<xs:element name="getCategoriesByParentIdResponse" type="tns:getCategoriesByParentIdResponse"></xs:element>

<xs:element name="getCategoryById" type="tns:getCategoryById"></xs:element>

<xs:element name="getCategoryByIdResponse" type="tns:getCategoryByIdResponse"></xs:element>

<xs:element name="getDocumentById" type="tns:getDocumentById"></xs:element>

<xs:element name="getDocumentByIdResponse" type="tns:getDocumentByIdResponse"></xs:element>

<xs:element name="getDocumentsByCategoryId" type="tns:getDocumentsByCategoryId"></xs:element>

<xs:element name="getDocumentsByCategoryIdResponse" type="tns:getDocumentsByCategoryIdResponse"></xs:element>

<xs:element name="getFileById" type="tns:getFileById"></xs:element>

<xs:element name="getFileByIdResponse" type="tns:getFileByIdResponse"></xs:element>

<xs:element name="searchDocuments" type="tns:searchDocuments"></xs:element>

<xs:element name="searchDocumentsResponse" type="tns:searchDocumentsResponse"></xs:element>

<xs:complexType name="getCategoryById">
<xs:sequence>
<xs:element name="categoryId" type="xs:long" minOccurs="0"></xs:element>
</xs:sequence>
</xs:complexType>

<xs:complexType name="getCategoryByIdResponse">
<xs:sequence>
<xs:element name="Category" type="tns:categoryKBservice" minOccurs="0"></xs:element>
</xs:sequence>
</xs:complexType>

<xs:complexType name="categoryKBservice">
<xs:sequence>
<xs:element name="id" type="xs:long"></xs:element>
<xs:element name="parentId" type="xs:long" minOccurs="0"></xs:element>
<xs:element name="status" type="xs:string" minOccurs="0"></xs:element>
<xs:element name="title" type="xs:string" minOccurs="0"></xs:element>
<xs:element name="description" type="xs:string" minOccurs="0"></xs:element>
<xs:element name="subcategories" type="xs:int"></xs:element>
<xs:element name="docs" type="xs:int"></xs:element>
</xs:sequence>
</xs:complexType>

<xs:complexType name="searchDocuments">
<xs:sequence>
<xs:element name="categoryId" type="xs:long" minOccurs="0"></xs:element>
<xs:element name="query" type="xs:string" minOccurs="0"></xs:element>
<xs:element name="title" type="xs:boolean"></xs:element>
<xs:element name="description" type="xs:boolean"></xs:element>
<xs:element name="keywords" type="xs:boolean"></xs:element>
<xs:element name="content" type="xs:boolean"></xs:element>
<xs:element name="maxResults" type="xs:int"></xs:element>
</xs:sequence>
</xs:complexType>

<xs:complexType name="searchDocumentsResponse">
<xs:sequence>
<xs:element name="Document" type="tns:documentKBservice" minOccurs="0" maxOccurs="unbounded"></xs:element>
</xs:sequence>
</xs:complexType>

<xs:complexType name="documentKBservice">
<xs:sequence>
<xs:element name="id" type="xs:long"></xs:element>
<xs:element name="categoryId" type="xs:long"></xs:element>
<xs:element name="title" type="xs:string" minOccurs="0"></xs:element>
<xs:element name="description" type="xs:string" minOccurs="0"></xs:element>
<xs:element name="keywords" type="xs:string" minOccurs="0"></xs:element>
<xs:element name="content" type="xs:string" minOccurs="0"></xs:element>
<xs:element name="file" type="xs:anyType" minOccurs="0" maxOccurs="unbounded"></xs:element>
</xs:sequence>
</xs:complexType>

<xs:complexType name="getCategoriesByParentId">
<xs:sequence>
<xs:element name="categoryId" type="xs:long" minOccurs="0"></xs:element>
</xs:sequence>
</xs:complexType>

<xs:complexType name="getCategoriesByParentIdResponse">
<xs:sequence>
<xs:element name="Category" type="tns:categoryKBservice" minOccurs="0" maxOccurs="unbounded"></xs:element>
</xs:sequence>
</xs:complexType>

<xs:complexType name="getDocumentById">
<xs:sequence>
<xs:element name="documentId" type="xs:long" minOccurs="0"></xs:element>
</xs:sequence>
</xs:complexType>

<xs:complexType name="getDocumentByIdResponse">
<xs:sequence>
<xs:element name="Document" type="tns:documentKBservice" minOccurs="0"></xs:element>
</xs:sequence>
</xs:complexType>

<xs:complexType name="getDocumentsByCategoryId">
<xs:sequence>
<xs:element name="categoryId" type="xs:long" minOccurs="0"></xs:element>
</xs:sequence>
</xs:complexType>

<xs:complexType name="getDocumentsByCategoryIdResponse">
<xs:sequence>
<xs:element name="Document" type="tns:documentKBservice" minOccurs="0" maxOccurs="unbounded"></xs:element>
</xs:sequence>
</xs:complexType>

<xs:complexType name="getFileById">
<xs:sequence>
<xs:element name="fileId" type="xs:long" minOccurs="0"></xs:element>
</xs:sequence>
</xs:complexType>

<xs:complexType name="getFileByIdResponse">
<xs:sequence>
<xs:element name="File" type="tns:fileKBservice" minOccurs="0"></xs:element>
</xs:sequence>
</xs:complexType>

<xs:complexType name="fileKBservice">
<xs:sequence>
<xs:element name="id" type="xs:long"></xs:element>
<xs:element name="name" type="xs:string"></xs:element>
<xs:element name="type" type="xs:string"></xs:element>
<xs:element name="description" type="xs:string"></xs:element>
<xs:element name="content" type="xs:base64Binary"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>

метод getDocumentById
...
Рейтинг: 0 / 0
JAX-WS и CDATA
    #35785629
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот и причина по которой content уезжает в CDATA, а description - нет.
<xs:element name="description" type="xs:string"></xs:element>
<xs:element name="content" type="xs:base64Binary"></xs:element>
...
Рейтинг: 0 / 0
JAX-WS и CDATA
    #35785748
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это не те content и description.


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<xs:complexType name="documentKBservice">
<xs:sequence>
<xs:element name="id" type="xs:long"></xs:element>
<xs:element name="categoryId" type="xs:long"></xs:element>
<xs:element name="title" type="xs:string" minOccurs="0"></xs:element>
<xs:element name="description" type="xs:string" minOccurs="0"></xs:element>
<xs:element name="keywords" type="xs:string" minOccurs="0"></xs:element>
<xs:element name="content" type="xs:string" minOccurs="0"></xs:element>
<xs:element name="file" type="xs:anyType" minOccurs="0" maxOccurs="unbounded"></xs:element>
</xs:sequence>
</xs:complexType>


<xs:element name="description" type="xs:string" minOccurs="0"></xs:element>
<xs:element name="content" type="xs:string" minOccurs="0"></xs:element>
...
Рейтинг: 0 / 0
JAX-WS и CDATA
    #35785823
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм, тогда WSDL здесь не причем. Значит реализация JAX-WS сама решает использовать ей CDATA или нет в зависимосит от данных. Какая реализация используется?
...
Рейтинг: 0 / 0
JAX-WS и CDATA
    #35785837
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
JAX-WS 2.1.4

А нельзя как-нибудь принудительно сделать, чтобы в обоих случаях использовалось CDATA?
Может, аннотация какая-нибудь есть?
Я правда не нашла походящей.

Мне бы не хотелось, чтобы повреждались HTML-теги.
...
Рейтинг: 0 / 0
JAX-WS и CDATA
    #35785838
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Точнее, конечно же, интересует именно реализация JAX-B, ведь её использует JAX-WS для XML сериализации. И, на сколько я вижу, JAX-B никак не декларируют возможность управлять появлением CDATA. Соответственно если и можно найти решение, то только под конкретную реализацию JAX-B
...
Рейтинг: 0 / 0
JAX-WS и CDATA
    #35785848
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JAX-WS и JAX-B это спецификации. Конечная реализация, обычно, берется у сервера приложений. Вот, например Metro это уже конечная реализация.

Ещё такой вопрос. Вы при билде приложения генерите классы сериализации? wsdeploy/wsimport. Или всё отдается на откуп серверу? Я не помню как там это в последних спецификация реализуется.
...
Рейтинг: 0 / 0
JAX-WS и CDATA
    #35785933
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну, я как бы в курсе, что такое спецификация и что такое реализация.
Вопрос-то был не об этом...

https://jax-ws.dev.java.net/

https://jax-ws.dev.java.net/2.1.4/

В Release Notes нашла Data binding - JAXB 2.1.7 RI.

При билде приложения используется the apt tool, который generates the portable artifacts used in JAX-WS services.


Если такая проблема у всех, кто использует JAX-WS 2.1.4, то решение должно быть где-то описано.
...
Рейтинг: 0 / 0
JAX-WS и CDATA
    #35785972
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот нашла

Q. How can I cause the Marshaller to generate CDATA blocks?
A. This functionality is not available from JAXB directly, but you can configure an Apache Xerces-J XMLSerializer to produce CDATA blocks. Please review the JaxbCDATASample.java sample app for more detail.

буду изучать
...
Рейтинг: 0 / 0
JAX-WS и CDATA
    #35786000
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yelenaНу, я как бы в курсе, что такое спецификация и что такое реализация.
Ну, если бы выше было написано JAX-WS RI 2.1.4, то и вопросов бы не возникло.

yelenaData binding - JAXB 2.1.7 RI.
При билде приложения используется the apt tool, который generates the portable artifacts used in JAX-WS services.
Начал бы я с того что посмотрел все же исходники JAXB RI и код сгенеренных артифактов на предмет того как же он идентифицирует надобность завернуть содержимое тега в CDATA.
А дальше в зависимости от найденного два возможных решения (и оба из них будет не просто портировать на другие реализации.)

- Подправить исходники RI чтобы использовать CDATA где нужно.
- Добавить дополнительную фазу в билд скрипт, в которой бы модифицировал сгенеренные артифакты под ваши нужды, если это возможно.

yelenaЕсли такая проблема у всех, кто использует JAX-WS 2.1.4, то решение должно быть где-то описано.
JAX-WS - спецификаия
JAX-WS RI - реализация. Предлагаю быть аккуратными в терминологии дабы не запутывать друг друга.

И добро пожаловать в мир Sun спецификаций. Здесь всё так. Если чего-то нет в спеке, то делается оно через заднее отверстие. И уж тем более не стоит надеятся на дополнительные фичи в Reference Implementation.

Как ещё один вариант можно предложить поискать другие реализации JAXB, которые может быть вдруг умеют контролировать появление CDATA.
...
Рейтинг: 0 / 0
JAX-WS и CDATA
    #35786052
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yelenaВот нашла

Q. How can I cause the Marshaller to generate CDATA blocks?
A. This functionality is not available from JAXB directly, but you can configure an Apache Xerces-J XMLSerializer to produce CDATA blocks. Please review the JaxbCDATASample.java sample app for more detail.

буду изучать
Видел. Сильно сомневаюсь что Вам это поможет. Потому как надо тогда JAX-WS нучить использовать другой Marshaller.

А вот что мне удалось найти после беглого просмотра исходников JAXB RI
https://txw.dev.java.net/javadoc/com/sun/xml/txw2/annotation/XmlCDATA.html
Имеет смысл опробовать и изучить.
...
Рейтинг: 0 / 0
JAX-WS и CDATA
    #35786086
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz
JAX-WS - спецификаия
JAX-WS RI - реализация. Предлагаю быть аккуратными в терминологии дабы не запутывать друг друга.


Хорошо, в следующий раз буду аккуратнее с использованием RI.
Не предполагалось, что 2.1.4 - это версия спецификации.


Большое спасибо за помощь.

Посмотрю, что можно сделать с
https://txw.dev.java.net/javadoc/com/sun/xml/txw2/annotation/XmlCDATA.html
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
JAX-WS и CDATA
    #38069964
artspb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как вариант решения: аннотация org.eclipse.persistence.oxm.annotations.XmlCDATA из EclipseLink JAXB (MOXy).
Здесь подробнее (англ.).
...
Рейтинг: 0 / 0
JAX-WS и CDATA
    #38069996
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
artspbКак вариант решения: аннотация org.eclipse.persistence.oxm.annotations.XmlCDATA из EclipseLink JAXB (MOXy).
Здесь подробнее (англ.).
С добрым утром.
Ничего что EclipseLink и JAX-WS RI не совсем одно и тоже? Да и, вроде как, про XmlCDATA уже отвечено.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / JAX-WS и CDATA
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]