Hello is there a way of passing an object (which contains a list) as an input to a Jersey WS
//_at_POST
//_at_Produces(value = "application/xml")
@POST
@Consumes(value = "application/xml")
@Produces(value = "application/xml")
public CPC3Output lookupDispenserInfo(CPC3Input cpc3Input) {
//inject remote services
ServiceInjector.injectServicesToTarget(this);
//open a session in database to link transaction log ot modifications
RamqSession001Ouput session = ramqSession001Service.createAuthenticationSession();
cpc3Input.setAuthenticationSessionId(session.getAthenticationSessionId());
cpc3Input.setLogicalSessionId(session.getLogicalSessionId());
CPC3Output cpc3Output = cpc3DispenserInfoService.doLookupDispenserInfo(cpc3Input);
//close the session in database
ramqSession001Service.closeAuthenticationSession(session.getLogicalSessionId());
return cpc3Output;
}
--------------------------------------------------------------------------------------------------------------------------------------------
public static CPC3Output lookupDispenserInfo(CPC3Input cpc3Input) {
//LOG.info("Calling RAMQ deconsent with: PHYSCODE={} | NAM={} | DECONSENT_MODE={}", new Object[]{ physcode, patientNam, deconsentMode });
//assume failure
CPC3Output cpc3Output = new CPC3Output();
cpc3Output.setSuccess(false);
try {
WebResource resource = Client.create().resource(RamqBridgeClientProperties.RAMQ_RWS_DISPENSERINFO_URL);
resource.type(MediaType.APPLICATION_XML).accept(MediaType.APPLICATION_XML);
resource.post(cpc3Input);
//*
//TODO: find a way to pass CPC3Input to the WebService
cpc3Output = resource.get(CPC3Output.class);
// ClientResponse.Status status = response.getClientResponseStatus();
// if (status.equals(ClientResponse.Status.OK)) {
// cpc3Output = response.getEntity(new GenericType<CPC3Output>() {});
// //LOG.debug("Received {} consent success flag from RAMQ web service", cpc3Output.getSuccess(), response.getClientResponseStatus().getStatusCode());
// } else {
// //LOG.warn("RAMQ web service returned status {} - {}", status.getStatusCode(), status.getReasonPhrase());
// }
// cpc3Output.setSuccess(true);
//*/
} catch (ClientHandlerException ex) {
LOG.error("Failed to lookup dispenser information", ex);
}
return cpc3Output;
results in....
com.sun.jersey.api.client.UniformInterfaceException: POST
http://localhost:6080/ramq/ramq-ws/dispenserInfo returned a response status of 500
I'm also trying what's described in Example 4.6 in Section 4.3 of the Jersey 1.9 User guide...
//JAXBElement<CPC3Input> JAXBin = new JAXBElement(new QName("/dispenserInfo"),CPC3Input.class,cpc3Input);
JAXBElement<CPC3Input> JAXBin = new JAXBElement(new QName("licenseNo"),CPC3Input.class,cpc3Input);
CPC3Output cpc3Output = cpc3DispenserInfoService.doLookupDispenserInfo(JAXBin);
Which is to post a JAXBElement<MyObj> ..
This is not working.... It gives error..
SEVERE: Failed to lookup dispenser information
com.sun.jersey.api.client.ClientHandlerException: javax.ws.rs.WebApplicationException: javax.xml.bind.MarshalException
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1027)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:137)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:121)
at org.testng.TestRunner.runWorkers(TestRunner.java:1030)
at org.testng.TestRunner.privateRun(TestRunner.java:709)
at org.testng.TestRunner.run(TestRunner.java:579)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:331)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:326)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:288)
at org.testng.SuiteRunner.run(SuiteRunner.java:193)
at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:910)
at org.testng.TestNG.runSuitesLocally(TestNG.java:879)
at org.testng.TestNG.run(TestNG.java:787)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:75)
at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:92)
Caused by: javax.ws.rs.WebApplicationException: javax.xml.bind.MarshalException
- with linked exception:
[java.net.ConnectException: Connection refused: connect]
at com.sun.jersey.core.provider.jaxb.AbstractJAXBElementProvider.writeTo(AbstractJAXBElementProvider.java:136)
at com.sun.jersey.core.provider.jaxb.AbstractJAXBElementProvider.writeTo(AbstractJAXBElementProvider.java:79)
at com.sun.jersey.api.client.RequestWriter.writeRequestEntity(RequestWriter.java:311)
at com.sun.jersey.client.urlconnection.URLConnectionClientHandler._invoke(URLConnectionClientHandler.java:181)
at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:129)
... 27 more
Caused by: javax.xml.bind.MarshalException
- with linked exception:
[java.net.ConnectException: Connection refused: connect]
at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:319)
at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:243)
at javax.xml.bind.helpers.AbstractMarshallerImpl.marshal(AbstractMarshallerImpl.java:74)
at com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider.writeTo(XMLJAXBElementProvider.java:118)
at com.sun.jersey.core.provider.jaxb.AbstractJAXBElementProvider.writeTo(AbstractJAXBElementProvider.java:134)
... 31 more
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:529)
at java.net.Socket.connect(Socket.java:478)
at sun.net.NetworkClient.doConnect(NetworkClient.java:163)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:394)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:529)
at sun.net.www.http.HttpClient.<init>(HttpClient.java:233)
at sun.net.www.http.HttpClient.New(HttpClient.java:306)
at sun.net.www.http.HttpClient.New(HttpClient.java:323)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:970)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:911)
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:836)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1014)
at com.sun.jersey.client.urlconnection.URLConnectionClientHandler$1$1.getOutputStream(URLConnectionClientHandler.java:202)
at com.sun.jersey.api.client.CommittingOutputStream.commitWrite(CommittingOutputStream.java:117)
at com.sun.jersey.api.client.CommittingOutputStream.write(CommittingOutputStream.java:89)
at com.sun.xml.internal.bind.v2.runtime.output.UTF8XmlOutput.flushBuffer(UTF8XmlOutput.java:390)
at com.sun.xml.internal.bind.v2.runtime.output.UTF8XmlOutput.endDocument(UTF8XmlOutput.java:121)
at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.endDocument(XMLSerializer.java:820)
at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.postwrite(MarshallerImpl.java:368)
at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:315)
... 35 more
From: John Okrasa
Sent: Sunday, September 11, 2011 9:57 PM
To: Jonathan Richard
Subject: CPC3 passing object
Good morning Jonathan,
Hope you had a good weekend.
I guess you know the WS will accept an object... so I am trying..
//_at_POST
//_at_Produces(value = "application/xml")
@POST
@Consumes(value = "application/xml")
@Produces(value = "application/xml")
public CPC3Output lookupDispenserInfo(CPC3Input cpc3Input) {
//inject remote services
ServiceInjector.injectServicesToTarget(this);
//open a session in database to link transaction log ot modifications
RamqSession001Ouput session = ramqSession001Service.createAuthenticationSession();
cpc3Input.setAuthenticationSessionId(session.getAthenticationSessionId());
cpc3Input.setLogicalSessionId(session.getLogicalSessionId());
CPC3Output cpc3Output = cpc3DispenserInfoService.doLookupDispenserInfo(cpc3Input);
//close the session in database
ramqSession001Service.closeAuthenticationSession(session.getLogicalSessionId());
return cpc3Output;
}
--------------------------------------------------------------------------------------------------------------------------------------------
public static CPC3Output lookupDispenserInfo(CPC3Input cpc3Input) {
//LOG.info("Calling RAMQ deconsent with: PHYSCODE={} | NAM={} | DECONSENT_MODE={}", new Object[]{ physcode, patientNam, deconsentMode });
//assume failure
CPC3Output cpc3Output = new CPC3Output();
cpc3Output.setSuccess(false);
try {
WebResource resource = Client.create().resource(RamqBridgeClientProperties.RAMQ_RWS_DISPENSERINFO_URL);
resource.type(MediaType.APPLICATION_XML).accept(MediaType.APPLICATION_XML);
resource.post(cpc3Input);
//*
//TODO: find a way to pass CPC3Input to the WebService
cpc3Output = resource.get(CPC3Output.class);
// ClientResponse.Status status = response.getClientResponseStatus();
// if (status.equals(ClientResponse.Status.OK)) {
// cpc3Output = response.getEntity(new GenericType<CPC3Output>() {});
// //LOG.debug("Received {} consent success flag from RAMQ web service", cpc3Output.getSuccess(), response.getClientResponseStatus().getStatusCode());
// } else {
// //LOG.warn("RAMQ web service returned status {} - {}", status.getStatusCode(), status.getReasonPhrase());
// }
// cpc3Output.setSuccess(true);
//*/
} catch (ClientHandlerException ex) {
LOG.error("Failed to lookup dispenser information", ex);
}
return cpc3Output;
results in....
com.sun.jersey.api.client.UniformInterfaceException: POST
http://localhost:6080/ramq/ramq-ws/dispenserInfo returned a response status of 500
John Okrasa
Java Developer
Clinical and Health Informatics Research Group
1140 Pine Ave. West Montreal QC H3A 1A3
TEL: 514-934-1934, x32975
FAX: 514-843-1551
john.okrasa_at_mail.mcgill.ca<mailto:john.okrasa_at_mail.mcgill.ca>