当前位置: 首页 > 知识库问答 >
问题:

Weblogic 12中的MOXy解组

田骁
2023-03-14

我在WebLogic12c(使用OpenJPA2.1.0)中运行web服务时遇到问题。web服务的响应是具有特定实体列表的DTO。执行服务后,无法生成其响应(没有任何错误或异常)。我认为在MOXy解组响应实体的操作过程中出现了一个问题(我在WebLogic11中没有遇到任何问题,因为它没有使用MOXy)。你对这个问题和解决方案有什么看法?

谢谢

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "person")
@Entity
@Table(name = "PERSON")

public class Person {

@Id
@Column(name = "ID")
@XmlElement(required = false)
private Long id;

@Column(name = "BIRTHDATE")
@XmlElement(required = false)
@Temporal(TemporalType.DATE)
private Date birthDate;

@Transient
private String name;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "personDto")
public class PersonDto implements Serializable{

@XmlElement(required = false)
List<Person> persons;

/**
 * list of person
 *
 * @return
 */
public List<Person> getPersons() {
    if (persons == null)
        persons = new LinkedList<Person>();

    return persons;
}

public void setpersons(List<Person> persons) {
    this.persons = persons;
}
@Stateless
public class PersonDaoImpl implements PersonDao{

@PersistenceContext(unitName = "pu-test")
private EntityManager em;

public List<Person> findAll() {
    List<Person> personList = null;
    Query query =  em.createNamedQuery("person.findAll");
    List<Person> results = (List<Person>)query.getResultList();
    return results;     
}
<named-query name="person.findAll">
    <query>select p from Person p</query>
</named-query>
@Stateless
@WebService
public class PersonServiceImpl implements IPersonService {

@EJB
private PersonDao personDao;


public PersonDto allPersons()  {
    PersonDto result = new PersonDto();
    List<Person> fList = personDao.findAll();       
    result.setPersons(fList);
    return result;
}

列表的大小为3,但没有响应。

共有1个答案

逑阳泽
2023-03-14

更新

问题似乎是OpenJPA正在用java.util.date的子类填充java.util.date类型的属性。我已经打开了以下EclipseLink bug,您可以使用它来跟踪我们在这个问题上的进展:

  • http://bugs.eclipse.org/383639
    null
package forum10967587;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.ejb.*;
import javax.jws.WebMethod;
import javax.jws.WebService;

//@Stateless
@WebService
public class PersonServiceImpl implements IPersonService {

    @WebMethod
    public PersonDto allPersons() {
        PersonDto result = new PersonDto();
        List<Person> fList = new ArrayList<Person>(3);

        Person p1 = new Person();
        p1.setBirthDate(new Date());
        p1.setId(1L);
        p1.setName("Jane");
        fList.add(p1);

        Person p2 = new Person();
        p2.setBirthDate(new Date());
        p2.setId(2L);
        p2.setName("John");
        fList.add(p2);

        result.setPersons(fList);
        return result;
    }

}

下面是我从WebLogic管理控制台运行内置测试客户端时收到的输出。

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Body>
    <ns0:allPersonsResponse xmlns:ns0="http://forum10967587/">
      <return>
        <persons>
          <id>1</id>
          <birthDate>2012-06-19T13:56:38.579</birthDate>
          <name>Jane</name>
        </persons>
        <persons>
          <id>2</id>
          <birthDate>2012-06-19T13:56:38.579</birthDate>
          <name>John</name>
        </persons>
      </return>
    </ns0:allPersonsResponse>
  </S:Body>
</S:Envelope>
 类似资料:
  • 在不使用getter和setter的情况下,JAXB可以正确地解组所提供的JSON。 null和“null”是完全不同的东西,但是我不想在POJO中包含这个字段,并且我必须忽略这些null值。 编辑

  • 我正在使用JAXB/MOXY解组包含约50个此类对象的XML文件: BR

  • 什么给了?MOXy似乎支持这些类型的序列化,但不支持反序列化? Moxy版本:

  • 如有任何线索将不胜感激。谢谢,约翰 XML是巨大的,但这里有一个片段,序列中的媒体是空的,而它不应该是空的。

  • 我在我的Jersey(2.7)项目中使用Moxy,基本上只是为了在服务发出响应时将我的对象整理为JSON。它工作得很好,但现在我也在使用ContainerResponseFilter对发出的每个响应进行一些更改,我不确定如何将请求体的内容解组到一个对象中,这是我需要的。 但我不确定是否有可能将它自动转换为一个对象。我需要的信息比较简单,所以我想我可以用另一种方式解析JSON,但我很好奇。 我试过找

  • 现在,当我发送包含以下json数据的POST请求时: 它工作得很好,MOXY会自动将这个json映射到用户对象,很好 但我需要使用另一层嵌套来处理json,如下所示: