powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Web-сервисы на eclipse
14 сообщений из 14, страница 1 из 1
Web-сервисы на eclipse
    #38190879
greg_123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Пишу небольшой web-сервис на java (eclipse, tomcat) - из java классов создаю wsdl. В ответ необходимо добавить обязательный тег.
Создаю новый класс, перечисляю переменные в определенном порядке, геттеры и сеттеры в том же порядке. При формировании wsdl порядок элементов внутри этого тега меняется - сортируются по алфавиту, и элементы, названные с большой буквы именуются теперь с маленькой. Как можно жестко задать порядок элементов внутри тега и чтобы элементы именовались с большой буквы?

Заранее спасибо.
...
Рейтинг: 0 / 0
Web-сервисы на eclipse
    #38190907
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Необходимо в класс добавить jaxb аннотации.
Например, чтобы задать порядок элементов, отличный от алфавитного, указываем propOrder, для чего перед названием класса помещаем аннотацию:
Код: java
1.
@XmlType(propOrder={"personId","email","phones","addresses"})



Чтобы задать название тега, помещаем соответствующую аннотацию перед полем/геттером:
Код: java
1.
2.
3.
4.
	@XmlElement(name="EMAIL")
	public Email getEmail() {
		return email;
	}
...
Рейтинг: 0 / 0
Web-сервисы на eclipse
    #38190966
greg_123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для того чтобы заработал механизм аннотаций нужно ли еще что-либо?

Потому что добавил аннотации:
Код: java
1.
@XmlType(propOrder={"MessageTypeId","MessageDate","SenderId","RecipientId","OperationTypeId","RequestMessageId","RequestMessageIdRef","ResponseMessageId","ResponseCode","ResponseComment"})



и

Код: java
1.
@XmlElement(required = true, name="MessageTypeId")



в импорт добавились классы:
import javax.xml.bind.annotation.*;

Но ничего не изменилось?
...
Рейтинг: 0 / 0
Web-сервисы на eclipse
    #38191007
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в propOrder должны быть перечислены не результирующие элементы, а свойства вашего класса (property), какими они видны из reflections, то есть, скорее всего, с маленькой буквы.
А наименование элемента разве не поменялось?
Аннотации с названиями элементов стоят перед геттерами? (если перед полями, то тогда необходимо добавить перед классом аннотацию
Код: java
1.
@XmlAccessorType(XmlAccessType.FIELD)

, так как по умолчанию доступ к свойствам (XmlAccessType.PROPERTY)
...
Рейтинг: 0 / 0
Web-сервисы на eclipse
    #38191362
greg_123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ничего, к сожалению, не изменилось. Может быть нужно еще какие-нибудь аннотации указывать?

Код: java
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.
import javax.xml.bind.annotation.*;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
//@XmlType(propOrder={"messageTypeId","messageDate","senderId","recipientId","operationTypeId","requestMessageId","requestMessageIdRef","responseMessageId","responseCode","responseComment"})
@XmlType(propOrder={"MessageTypeId","MessageDate","SenderId","RecipientId","OperationTypeId","RequestMessageId","RequestMessageIdRef","ResponseMessageId","ResponseCode","ResponseComment"})
public class MessageInfoList {
	
	private String MessageTypeId = null;
	private Date MessageDate = null;
	private String SenderId = null;
	private String RecipientId = null;
	private String OperationTypeId = null;
	private String RequestMessageId = null;
	private String RequestMessageIdRef = null;
	private String ResponseMessageId = null;
	private String ResponseCode = null;
	private String ResponseComment = null;
	
	public MessageInfoList()
	{
		setMessageInfo("0");
	}
	
	public MessageInfoList(String ownerID)
	{	
		if (ownerID.trim().equalsIgnoreCase("")) 
			setMessageInfo("0");
		else
			setMessageInfo(ownerID);
	}

	private void setMessageInfo(String ownerID)
	{

	}

	@XmlElement(required = true, name="MessageTypeId")
	public String getMessageTypeId() {
		return MessageTypeId;
	}

	public void setMessageTypeId(String messageTypeId) {
		MessageTypeId = messageTypeId;
	}
	@XmlElement(required = true, name="MessageDate")
	public Date getMessageDate() {
		return MessageDate;
	}

	public void setMessageDate(Date messageDate) {
		MessageDate = messageDate;
	}
	@XmlElement(required = true, name="SenderId")
	public String getSenderId() {
		return SenderId;
	}

	public void setSenderId(String senderId) {
		SenderId = senderId;
	}
	@XmlElement(required = true, name="RecipientId")
	public String getRecipientId() {
		return RecipientId;
	}

	public void setRecipientId(String recipientId) {
		RecipientId = recipientId;
	}
	@XmlElement(required = true, name="OperationTypeId")
	public String getOperationTypeId() {
		return OperationTypeId;
	}

	public void setOperationTypeId(String operationTypeId) {
		OperationTypeId = operationTypeId;
	}
	@XmlElement(required = true, name="RequestMessageId")
	public String getRequestMessageId() {
		return RequestMessageId;
	}

	public void setRequestMessageId(String requestMessageId) {
		RequestMessageId = requestMessageId;
	}
	@XmlElement(required = true, name="RequestMessageIdRef")
	public String getRequestMessageIdRef() {
		return RequestMessageIdRef;
	}

	public void setRequestMessageIdRef(String requestMessageIdRef) {
		RequestMessageIdRef = requestMessageIdRef;
	}
	@XmlElement(required = true, name="ResponseMessageId")
	public String getResponseMessageId() {
		return ResponseMessageId;
	}

	public void setResponseMessageId(String responseMessageId) {
		ResponseMessageId = responseMessageId;
	}
	@XmlElement(required = true, name="ResponseCode")
	public String getResponseCode() {
		return ResponseCode;
	}

	public void setResponseCode(String responseCode) {
		ResponseCode = responseCode;
	}
	@XmlElement(required = true, name="ResponseComment")
	public String getResponseComment() {
		return ResponseComment;
	}

	public void setResponseComment(String responseComment) {
		ResponseComment = responseComment;
	}


}
...
Рейтинг: 0 / 0
Web-сервисы на eclipse
    #38191423
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Указано
Код: java
1.
@XmlAccessorType(XmlAccessType.FIELD)

, а аннотации стоят перед геттерами. Если указано XmlAccessType.FIELD, то аннотации с названиями элементов должны стоять перед полями
...
Рейтинг: 0 / 0
Web-сервисы на eclipse
    #38191484
greg_123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да я уже и так и так пробовал:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
        @XmlElement(required = true, name="MessageTypeId")
	private String MessageTypeId = null;
	@XmlElement(required = true, name="MessageDate")
	private Date MessageDate = null;
	@XmlElement(required = true, name="SenderId")
	private String SenderId = null;
	@XmlElement(required = true, name="RecipientId")
	private String RecipientId = null;
	@XmlElement(required = true, name="OperationTypeId")
	private String OperationTypeId = null;
	@XmlElement(required = true, name="RequestMessageId")
	private String RequestMessageId = null;
	@XmlElement(required = true, name="RequestMessageIdRef")
	private String RequestMessageIdRef = null;
	@XmlElement(required = true, name="ResponseMessageId")
	private String ResponseMessageId = null;
	@XmlElement(required = true, name="ResponseCode")
	private String ResponseCode = null;
	@XmlElement(required = true, name="ResponseComment")
	private String ResponseComment = null;



Такое ощущение, что eclipse просто не воспринимает аннотации. Может есть какая-либо настройка для их использования?
...
Рейтинг: 0 / 0
Web-сервисы на eclipse
    #38191537
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если ничего не получается, остается создать XSD для вашего класса, и провести reverse engineering, там все аннотации и поля будут прописаны как надо. Процессор находится в папке jdk/bin. В простейшем случае команда должна выглядеть так:
Код: powershell
1.
"путь_к_jdk/bin/xjc" ваш_xsd.xsd


в текущем каталоге будет создан файл "ваш_класс.java"
...
Рейтинг: 0 / 0
Web-сервисы на eclipse
    #38192992
greg_123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С помощью "путь_к_jdk/bin/xjc" ваш_xsd.xsd создался класс. От туда взял аннотации:

Код: java
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.
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "MessageInfoType", propOrder = {
    "messageTypeId",
    "messageDate",
    "senderId",
    "recipientId",
    "operationTypeId",
    "requestMessageId",
    "requestMessageIdRef",
    "responseMessageId",
    "responseCode",
    "responseComment"
})
public class MessageInfoList {
	
	@XmlElement(name = "MessageTypeId", required = true)
    protected String messageTypeId;
    @XmlElement(name = "MessageDate", required = true)
    @XmlSchemaType(name = "dateTime")
    protected Date messageDate;
    @XmlElement(name = "SenderId", required = true)
    protected String senderId;
    @XmlElement(name = "RecipientId", required = true)
    protected String recipientId;
    @XmlElement(name = "OperationTypeId", required = true)
    protected String operationTypeId;
    @XmlElement(name = "RequestMessageId", required = true)
    protected String requestMessageId;
    @XmlElement(name = "RequestMessageIdRef")
    protected String requestMessageIdRef;
    @XmlElement(name = "ResponseMessageId")
    protected String responseMessageId;
    @XmlElement(name = "ResponseCode")
    protected String responseCode;
    @XmlElement(name = "ResponseComment")
    protected String responseComment;
...



Но при создании wsdl эти аннотации похоже игнорируются :(
...
Рейтинг: 0 / 0
Web-сервисы на eclipse
    #38193190
greg_123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу прощения, не правильно указал "name".
Должно быть так:
Код: java
1.
@XmlType(name = "MessageInfoList", propOrder = {



Но результат тот же - не работает.
...
Рейтинг: 0 / 0
Web-сервисы на eclipse
    #38196126
greg_123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Установил eclipse juno и tomcat 7.
Сделал пробный проект web-сервиса:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
package ru.test.hello;

import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.xml.bind.annotation.XmlAccessorType;


@WebService
public class Hello {
	
	@WebMethod
	public MyStr getHello(String s)
	{
		MyStr res = new MyStr(s);
		return res;
	}
	


}



Код: java
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.
package ru.test.hello;

import java.util.Date;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;

@XmlAccessorType(XmlAccessType.FIELD)
public class MyStr {
	@XmlElement(required = true, name="S1")
	protected String s;
	@XmlElement(required = true, name="D1")
	protected Date d;

	public MyStr(){
		
	}
	
	public MyStr(String str){
		
		//s = "Hello " + str + " !!!";
		//d = java.util.Calendar.getInstance().getTime();
		setS("Hello " + str + " !!!");
		setD(java.util.Calendar.getInstance().getTime());
		
	}

	public String getS() {
		return s;
	}

	public void setS(String s) {
		this.s = s;
	}

	public Date getD() {
		return d;
	}

	public void setD(Date d) {
		this.d = d;
	}
	
}



Получил wsdl:

Код: xml
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.
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://hello.test.ru" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://hello.test.ru" xmlns:intf="http://hello.test.ru" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!--WSDL created by Apache Axis version: 1.4
Built on Apr 22, 2006 (06:55:48 PDT)-->
 <wsdl:types>
  <schema elementFormDefault="qualified" targetNamespace="http://hello.test.ru" xmlns="http://www.w3.org/2001/XMLSchema">
   <element name="getHello">
    <complexType>
     <sequence>
      <element name="s" type="xsd:string"/>
     </sequence>
    </complexType>
   </element>
   <element name="getHelloResponse">
    <complexType>
     <sequence>
      <element name="getHelloReturn" type="impl:MyStr"/>
     </sequence>
    </complexType>
   </element>
   <complexType name="MyStr">
    <sequence>
     <element name="d" nillable="true" type="xsd:dateTime"/>
     <element name="s" nillable="true" type="xsd:string"/>
    </sequence>
   </complexType>
  </schema>
 </wsdl:types>

   <wsdl:message name="getHelloRequest">

      <wsdl:part element="impl:getHello" name="parameters">

      </wsdl:part>

   </wsdl:message>

   <wsdl:message name="getHelloResponse">

      <wsdl:part element="impl:getHelloResponse" name="parameters">

      </wsdl:part>

   </wsdl:message>

   <wsdl:portType name="Hello">

      <wsdl:operation name="getHello">

         <wsdl:input message="impl:getHelloRequest" name="getHelloRequest">

       </wsdl:input>

         <wsdl:output message="impl:getHelloResponse" name="getHelloResponse">

       </wsdl:output>

      </wsdl:operation>

   </wsdl:portType>

   <wsdl:binding name="HelloSoapBinding" type="impl:Hello">

      <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>

      <wsdl:operation name="getHello">

         <wsdlsoap:operation soapAction=""/>

         <wsdl:input name="getHelloRequest">

            <wsdlsoap:body use="literal"/>

         </wsdl:input>

         <wsdl:output name="getHelloResponse">

            <wsdlsoap:body use="literal"/>

         </wsdl:output>

      </wsdl:operation>

   </wsdl:binding>

   <wsdl:service name="HelloService">

      <wsdl:port binding="impl:HelloSoapBinding" name="Hello">

         <wsdlsoap:address location="http://localhost/Hello/services/Hello"/>

      </wsdl:port>

   </wsdl:service>

</wsdl:definitions>



Но аннотация @XmlElement так и небыла использована, т.е. элементы тега MyStr так и остались с маленьком буквы.
Почему аннотации не используются? Может кто-нибудь сталкивался с такой проблемой?

Заранее спасибо.
...
Рейтинг: 0 / 0
Web-сервисы на eclipse
    #38196833
greg_123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может быть необходимо установить JAXB?
Только непонятно что именно нужно установить для eclipse?
...
Рейтинг: 0 / 0
Web-сервисы на eclipse
    #38198294
greg_123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробовал создать wsdl по тем же двум классам из проекта на weblogic.
Результат
wsdl:
Код: java
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.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.2.6hudson-86  svn-revision#12773. -->
<definitions targetNamespace="http://hello.test.ru/" name="HelloService" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:tns="http://hello.test.ru/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
  <types>
    <xsd:schema>
      <xsd:import namespace="http://hello.test.ru/" schemaLocation="HelloService_schema1.xsd"/>
    </xsd:schema>
  </types>
  <message name="getHello">
    <part name="parameters" element="tns:getHello"/>
  </message>
  <message name="getHelloResponse">
    <part name="parameters" element="tns:getHelloResponse"/>
  </message>
  <portType name="Hello">
    <operation name="getHello">
      <input wsam:Action="http://hello.test.ru/Hello/getHelloRequest" message="tns:getHello"/>
      <output wsam:Action="http://hello.test.ru/Hello/getHelloResponse" message="tns:getHelloResponse"/>
    </operation>
  </portType>
  <binding name="HelloPortBinding" type="tns:Hello">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
    <operation name="getHello">
      <soap:operation soapAction=""/>
      <input>
        <soap:body use="literal"/>
      </input>
      <output>
        <soap:body use="literal"/>
      </output>
    </operation>
  </binding>
  <service name="HelloService">
    <port name="HelloPort" binding="tns:HelloPortBinding">
      <soap:address location="REPLACE_WITH_ACTUAL_URL"/>
    </port>
  </service>
</definitions>


и xsd:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:ns0="http://hello.test.ru/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://hello.test.ru/">
   <xsd:complexType name="myStr">
      <xsd:sequence>
         <xsd:element name="S1" type="xsd:string"/>
         <xsd:element name="D1" type="xsd:dateTime"/>
      </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="getHelloResponse">
      <xsd:sequence>
         <xsd:element name="return" type="ns0:myStr" minOccurs="0"/>
      </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="getHello">
      <xsd:sequence>
         <xsd:element name="arg0" type="xsd:string" minOccurs="0"/>
      </xsd:sequence>
   </xsd:complexType>
   <xsd:element name="getHelloResponse" type="ns0:getHelloResponse"/>
   <xsd:element name="getHello" type="ns0:getHello"/>
</xsd:schema>



Возвращаемые значения теперь стали называться как в аннотациях. Но входное значение теперь называется arg0.
Почему так по-разному формируются wsdl из одних и тех же классов?
И как же можно использовать аннотации в проекте на tomcat?
...
Рейтинг: 0 / 0
Web-сервисы на eclipse
    #38198493
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я не знаток томката, в основном на jboss-е, и там сервисы генерятся нормально. Возможно, ответ заключен в схеме, сгенерированной томкатом:
Код: xml
1.
2.
<!--WSDL created by Apache Axis version: 1.4
Built on Apr 22, 2006 (06:55:48 PDT)-->


- используется что-то сильно устаревшее.
JAXB 2.0, аннтотации которого используются для описания названий элементов и т.п., выпущен тоже в 2006 году, но где-то летом, так что скорее всего, этот томкат его не использует. Так что аннотации тут не помогут, надо как-то "навязать" серверу xsd схему
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Web-сервисы на eclipse
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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