从soap Web服务返回ObjectId

时间:2014-05-07 18:41:14

标签: java spring web-services mongodb soap

我有2个java应用程序。肥皂服务器(jax-ws)和肥皂客户端。 Soap服务器使用spring mongo和mongoDb作为数据库。 因此,在我的服务器上,我有方法可以重新命令所有公司

@WebMethod(operationName = "getCompanies")
public CompanyList getCompanies(){
    CompanyList companyList = new CompanyList();
    companyList.companyDocArrayList = Lists.newArrayList(orgStructService.getCompanyDocService().findAll());
    return companyList;
}

companyList类

public class CompanyList {
    public ArrayList<CompanyDoc> companyDocArrayList;
}

和CompanyDoc

public class CompanyDoc{
    @Id
    private ObjectId id;
    private String companyName;
//getter setter
}

所以,当我调用这个方法时

 ClientService clientService = new ClientService Service().getClientServicePort();
        modelMap.addAttribute("companyList", clientService.getCompanies().getCompanyDocArrayList());

在List中的clientService.getCompanies()中,我得到奇怪的objectId,如com.web.client.services.ws.ObjectId@45ee7ab1(45ee7ab1 - 此值更改每个刷新页面) 但在数据库中它是5369fefa1d6e6712866daaea

我做错了什么?

1 个答案:

答案 0 :(得分:2)

似乎JAX-WS不知道如何将ObjectId对象转换为String。我不知道您如何使用您的文档,但我认为您可以在String对象中使用ObjectId代替CompanyDoc。当您插入数据时,Spring data会将String转换为ObjectId,反之亦然。

public class CompanyDoc{
    @Id
    private String id;
    private String companyName;
//getter setter
}

来自documentation

的更多信息
  

以下概述了将要进行的类型转换(如果有)   使用时映射到_id文档字段的属性   MappingMongoConverter,MongoTemplate的默认值。

     
      
  • 在Java类中声明为String的id属性或字段将转换为ObjectId并存储为ObjectId(如果可能,使用Spring)   转换器。有效转换规则委托给
      Mongo Java驱动程序。如果它无法转换为ObjectId,那么   该值将作为字符串存储在数据库中。
  •   
  • Java类中声明为BigInteger的id属性或字段将使用Spring转换为ObjectId并存储为   转换器。
  •