[英]Jersey client does not return or read response from multiple class objects
我的Web服務從多個實體返回響應。 但是當我通過使用response.readEntity(A.class)閱讀響應時。 注意類A包含類B和類C的依賴項。當我從上述語句讀取響應時,我只能讀取類A的內容。
在郵遞員那里,一切都很好。 郵遞員顯示包含A,B,C類內容的響應。 但是在球衣客戶中,我沒有獲得B類和C類內容。
您能幫我解決這個問題嗎?
以下是我的Java Pojo代碼
@XmlRootElement(name = "TA_TESTPATTERN")
@XmlAccessorType(XmlAccessType.FIELD)
public class TAPattern {
private User User;
private String TP_Type;
private String Car;
private String Category;
private String Description;
private TestCase TestCase;
private String status;
private String Customizable_Field;
private RESULT_COLLECTION RESULT_COLLECTION;
private String Id;
private String xmlns;
private String Variant;
private String Code;
這里RESULT_COLLECTION
是另一個類B
,而RESULT_COLLECTON
再次包含類RESULT
的對象數組的依賴項。 意味着RESULT_COLLECTION
包含RESULT
類數組。 因此,在我的情況下,類TAPattern
是A
,類RESULT_COLLECTION
是B
,類RESULT
是C
測試用例說D
以下是我的球衣客戶代碼:
Response response = invocationBuilder.header("Content-Type", "application/xml")
.post(Entity.entity(vstpattern, MediaType.APPLICATION_XML));
return response.readEntity(TAPattern.class);
以下是RESULT_COLLECTION
, RESULT
和測試用例的POJO類:
@XmlRootElement(name = "RESULT_COLLECTION")
@XmlAccessorType(XmlAccessType.FIELD)
public class RESULT_COLLECTION {
private Result[] Result;
}
@XmlRootElement(name = "Result")
@XmlAccessorType(XmlAccessType.FIELD)
public class Result {
private String Method;
private String Href;
private String Rel;
}
@XmlRootElement(name = "TestCase")
@XmlAccessorType(XmlAccessType.FIELD)
public class TestCase {
private String Method;
private String Href;
private String Rel;
}
以下是我的球衣客戶代碼:
ConfigPropertyHandler configPropertyHandler = ConfigPropertyHandler.getInstance();
ClientConfig config = new ClientConfig();
HttpAuthenticationFeature feature = HttpAuthenticationFeature.basic(configPropertyHandler.getTid(),
configPropertyHandler.getPassword());
Client client = ClientBuilder.newClient(config);
client.register(feature);
WebTarget webTarget = client.target(configPropertyHandler.getVstUrl()).path(configPropertyHandler.getVstPath());
Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_XML);
Response response = invocationBuilder.header("Content-Type", "application/xml")
.post(Entity.entity(vstpattern, MediaType.APPLICATION_XML));
//return 0;
return response.readEntity(TAPattern.class);
}
以下是xml POSTMAN請求:
<TA_TESTPATTERN xmlns="http://examples.com" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Car>MyCar</Car>
<Id>122</Id>
<Code>myCode</Code>
<Description> TA TEST</Description>
<TP_Type>VF</TP_Type>
<Category>0</Category>
<Variant>0</Variant>
<Customizable_Field> nda </Customizable_Field>
<status>w</status>
<RESULT_COLLECTION>
<Result>
<Href>http://examples.com</Href>
<Method>GET</Method>
<Rel>READ</Rel>
</Result>
<Result>
<Href>http://examples.com</Href>
<Method>GET</Method>
<Rel>READ</Rel>
</Result>
</RESULT_COLLECTION>
<TestCase>
<Href>http://examples.com</Href>
<Method>GET</Method>
<Rel>READ</Rel>
</TestCase>
<User>
<ID>f10711a</ID>
<email>abc@external.com</email>
<Name>abc</Name>
</User>
</TA_TESTPATTERN>
以下是我的TA_Pattern
@XmlRootElement(name = "TA_TESTPATTERN")
@XmlAccessorType(XmlAccessType.FIELD)
public class TAPattern {
@XmlElement(name = "User")
private User User;
@XmlElement(name = "TP_Type")
private String TP_Type;
@XmlElement(name = "Car")
private String Car;
@XmlElement(name = "Category")
private String Category;
@XmlElement(name = "Description")
private String Description;
@XmlElement(name = "TestCase")
private TestCase TestCase;
@XmlElement(name = "status")
private String status;
@XmlElement(name = "Customizable_Field")
private String Customizable_Field;
@XmlElement(name = "RESULT_COLLECTION") RESULT_COLLECTION RESULT_COLLECTION;
@XmlElement(name = "Id")
private String Id;
@XmlElement(name = "xmlns")
private String xmlns;
@XmlElement(name = "Variant")
private String Variant;
@XmlElement(name = "Code")
private String Code;
以下是VSTTAPattern的POJO
@XmlRootElement(name = "TA_TESTPATTERN")
@XmlAccessorType(XmlAccessType.FIELD)
public class VSTTAPattern {
private User User;
private String TP_Type;
private String Car;
private String Category;
private String Description;
private TestCase TestCase;
private String status;
private String Customizable_Field;
private RESULT_COLLECTION RESULT_COLLECTION;
private String Id;
private String xmlns;
private String Variant;
private String Code;
我強烈建議通過完全刪除RESULT_COLLECTION並將Result對象的列表添加到TAPattern類來更改您的設計。
class TAPattern{
...
@XmlElement
private List<Result> resultList;
}
public List<Result> getResultList(){
if(resultList==null)
resultList = new ArrayList<Result>();
return resultList;
}
@XmlAccessorType(XmlAccessType.FIELD)
class Result {
....
}
這將使設計更加整潔。 就是說,我不確定您如何在服務器上生成xml響應,也許還有一些我不知道的約束。
更新:下面的代碼為我工作。
ClientConfig config = new ClientConfig();
Client client = ClientBuilder.newClient(config);
WebTarget target = client.target(UriBuilder.fromUri("http://localhost:8088/JerseyRest").build());
User u = new User();
u.email = "xx@xx.com";
u.ID = "sjdgzuauoj";
u.Name = "user name";
TestCase tc = new TestCase();
tc.Href = "yyyy@hreg.com";
tc.Method = "POST";
tc.Rel = "link@link.com";
Result[] rArr = new Result[]{ new Result(), new Result()};
rArr[0].Href = "href@href.com";
rArr[0].Method = "GET";
rArr[0].Rel = "READ";
rArr[1].Href = "href@href1.com";
rArr[1].Method = "POST";
rArr[1].Rel = "WRITE";
RESULT_COLLECTION rCol = new RESULT_COLLECTION();
rCol.Result = rArr;
TAPattern req = new TAPattern();
req.RESULT_COLLECTION = rCol;
req.Car = "Volvo";
req.Category = "0";
req.Code = "1";
req.Customizable_Field = "0";
req.Description = "Test";
req.status = "Y";
req.Variant = "0";
req.TestCase = tc;
req.User = u;
//GenericType<List<TAPattern>> taList = new GenericType<List<TAPattern>>() {};
try{
// Get XML for application
Response res = target.path("rest").path("UserService").path("xxxr").request()
.accept(MediaType.APPLICATION_XML).post(Entity.entity(req, MediaType.APPLICATION_XML),Response.class);
TAPattern ta = (TAPattern)res.readEntity(TAPattern.class);
for(Result r : ta.RESULT_COLLECTION.Result ){
System.out.println("Href: "+r.Href);
System.out.println("Rel: "+r.Rel);
System.out.println("Mehod: "+r.Method);
}
}catch(Exception e){
System.out.println(e);
return;
}
您可能沒有正確填充TAPattern對象,結果並沒有收回一切。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.