powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Чудесное исчезновение
15 сообщений из 15, страница 1 из 1
Чудесное исчезновение
    #38710927
Rebeled
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется два приклада.
Первый приклад вызывает метод второго по WS.
В методе второго приклада
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
 public EntityObj magicMethod(){
        EntityObj obj = null;
        EntityObj result = null;
        EntityManager em = getEntityManager();
        Query query = em.createNamedQuery("EntityObj.findBySomeThing");
        obj = (EntityObj) query.getSingleResult();
        result = obj;//Вот это важно
        return result;
    }


Из базы через Hibernate извлекается Entity объект, переприсваевается другой переменной и отправляется в ретурн по вебсервису.
В чем беда: почему то одно из полей EntityObj с типом java.util.Date при этом обнуляется. Т.е. на втором прикладе оно перед ретурном есть, а в первом его уже нет, после прохождения через SOAP WS.
Очень похоже на то, что это поле присваивается какой то локальной переменной, которая уничтожается после отрабатывания метода вебсервиса.
Если перед ретурном сделать
Код: java
1.
         result.setMagicDate(new Date(ret.getMagicDate().getTime()));


или вместо переприсваивания клонировать весь объект EntityObj obj в EntityObj result, то проблема решается.
В чем вопрос: с чем связанно такое "выборочное" обнуление полей EntityObj? Почему не обнулились другие поля или весь result? В каких ещё случаях такое возможно?
...
Рейтинг: 0 / 0
Чудесное исчезновение
    #38710935
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поставить breakpoint на setMagicDate() и посмотреть?
...
Рейтинг: 0 / 0
Чудесное исчезновение
    #38710939
Rebeled
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczПоставить breakpoint на setMagicDate() и посмотреть?
Ставил, не вызывается сеттер. По коду тоже рыскал, не нашел.
...
Рейтинг: 0 / 0
Чудесное исчезновение
    #38710942
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
new EntityObj().getMagicDate() - вернет null? Или есть какое-то значение по-умолчанию?
...
Рейтинг: 0 / 0
Чудесное исчезновение
    #38710950
Rebeled
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicznew EntityObj().getMagicDate() - вернет null? Или есть какое-то значение по-умолчанию?
null
...
Рейтинг: 0 / 0
Чудесное исчезновение
    #38710957
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно поставить field breakpoint. Но тормозить будет жутко.
...
Рейтинг: 0 / 0
Чудесное исчезновение
    #38710964
Rebeled
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Листинг EntityObj:
Код: 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.
package com.entity;

import java.io.Serializable;
import java.math.BigInteger;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

@Entity
@Table(name = "SCOTT.ENTITY_OBJ")
@NamedQueries({@NamedQuery(name = "EntityObj.findBySomeThing", query = "...")

public class EntityObj  implements Cloneable, Serializable{
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "ENTITY_OBJ_UNID")
    private long entityObjUnid;
    @Column(name = "ENTITY_UNID")
    private Long entityUnid;
    @Column(name = "ENTITY_OBJ_NAME")
    private String entityObjName;
    @Column(name = "MAGIC_DATE")
    @Temporal(TemporalType.DATE)
    private Date magicDate;
    @Transient
    private boolean someField = false;
    @Transient
    private String someField2;

    public EntityObj() {
    }

    //Get/Set ...
}
...
Рейтинг: 0 / 0
Чудесное исчезновение
    #38710970
Rebeled
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczМожно поставить field breakpoint. Но тормозить будет жутко.
Т.е. Вы думаете, что тут не магия, а какое то прямое присваивание fieldа локальной переменной из кода? Я грешил на какие то особенности маппинга дат хибернетом.
...
Рейтинг: 0 / 0
Чудесное исчезновение
    #38710985
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RebeledТ.е. Вы думаете, что тут не магия, а какое то прямое присваивание fieldа локальной переменной из кода? Я грешил на какие то особенности маппинга дат хибернетом.
Сложно сказать. А на getter если поставить брейкпоинт? SOAP сериализатор его вызывает?
...
Рейтинг: 0 / 0
Чудесное исчезновение
    #38711038
Rebeled
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczRebeledТ.е. Вы думаете, что тут не магия, а какое то прямое присваивание fieldа локальной переменной из кода? Я грешил на какие то особенности маппинга дат хибернетом.
Сложно сказать. А на getter если поставить брейкпоинт? SOAP сериализатор его вызывает?
Да, аж 3 раза. Каждый раз значение не пустое.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public Date getMagicDate() {
        try{throw new Exception();}
        catch(Exception ex){
            java.io.StringWriter writer = new java.io.StringWriter();
            java.io.PrintWriter printWriter = new java.io.PrintWriter( writer );
            ex.printStackTrace( printWriter );
            printWriter.flush();

            String stackTrace = writer.toString();
            System.out.println(stackTrace);
            System.out.println(magicDate+"");
        }

        return magicDate;
    }


Код: 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.
	at com.entity.EntityObj.getMagicDate(EntityObj.java:552)
	at com.entity.EntityObj$JaxbAccessorM_getMagicDate_setMagicDate_java_util_Date.get(MethodAccessor_Ref.java:56)
	at com.sun.xml.bind.v2.runtime.reflect.TransducedAccessor$CompositeTransducedAccessorImpl.writeLeafElement(TransducedAccessor.java:256)
	at com.sun.xml.bind.v2.runtime.property.SingleElementLeafProperty.serializeBody(SingleElementLeafProperty.java:129)
	at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:358)
	at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:696)
	at com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:158)
	at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:358)
	at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:696)
	at com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:271)
	at com.sun.xml.bind.v2.runtime.BridgeImpl.marshal(BridgeImpl.java:104)
	at com.sun.xml.bind.api.Bridge.marshal(Bridge.java:145)
	at com.sun.xml.ws.db.glassfish.BridgeWrapper.marshal(BridgeWrapper.java:170)
	at com.sun.xml.ws.message.jaxb.JAXBMessage.writePayloadTo(JAXBMessage.java:393)
	at com.sun.xml.ws.message.AbstractMessageImpl.writeTo(AbstractMessageImpl.java:149)
	at com.sun.xml.ws.encoding.StreamSOAPCodec.encode(StreamSOAPCodec.java:127)
	at com.sun.xml.ws.encoding.SOAPBindingCodec.encode(SOAPBindingCodec.java:285)
	at com.sun.xml.ws.transport.http.HttpAdapter.encodePacket(HttpAdapter.java:421)
	at com.sun.xml.ws.transport.http.HttpAdapter.access$100(HttpAdapter.java:99)
	at com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:650)
	at com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:263)
	at com.sun.xml.ws.transport.http.servlet.ServletAdapter.invokeAsync(ServletAdapter.java:218)
	at com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doGet(WSServletDelegate.java:159)
	at com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doPost(WSServletDelegate.java:194)
	at com.sun.xml.ws.transport.http.servlet.WSServlet.doPost(WSServlet.java:80)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:688)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:770)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
	at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
	at java.lang.Thread.run(Thread.java:662)


При этом дата перестала пропадать после вызова WS, хотя я убрал все костыли. Причем, судя по логам, она то пропадает, то нет. Вернее на каких то сессиях пропадает стабильно, а на каких то стабильно не пропадает. Короче мистика.
...
Рейтинг: 0 / 0
Чудесное исчезновение
    #38711047
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rebeled,

Самописных Thread.dumpStack() я ещё не видел. Ещё и с таким оверхедом по памяти.
...
Рейтинг: 0 / 0
Чудесное исчезновение
    #38711049
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таки остаётся только одно. Field Breakpoint с условием.
...
Рейтинг: 0 / 0
Чудесное исчезновение
    #38711077
Rebeled
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczRebeled,

Самописных Thread.dumpStack() я ещё не видел. Ещё и с таким оверхедом по памяти.
Не верю(с) =)
BlazkowiczТаки остаётся только одно. Field Breakpoint с условием.
Не помогает, так как проблема чудесным образом перестала проявляться в дебагере. Условие поставил magicDate==null. Правильно? Никогда условием не пользовался.
...
Рейтинг: 0 / 0
Чудесное исчезновение
    #38711084
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RebeledНе помогает, так как проблема чудесным образом перестала проявляться в дебагере. Условие поставил magicDate==null. Правильно? Никогда условием не пользовался.
Нет. Я имел ввиду, что нужно фильтровать field access/field modification. magicDate==null не отработает в нужный момент, потому что значение не null, в тот момент, когда кто-то присваивает null.
...
Рейтинг: 0 / 0
Чудесное исчезновение
    #38713229
Rebeled
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема решилась (тьфу-тьфу-тьфу) заменой METRO с версии "валялась на гласфише" на версию "вот эта работала"
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Чудесное исчезновение
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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