Hi

I've looked at a CXF JAX-RS Failover test - all the tests use GET, hmm...

Are you saying that when the initial call is made, doChainedInvocation
contains Content-Type but when doChainedInvocation is called by retryInvoke, Content-Type is no longer in the request headers ?

Cheers, Sergey

On 23/10/15 17:28, sreeharsha wrote:
hi Sergey,

I am trying to implement the failover to our rest services which take the
header content-type Multipart/formdata.

I have noticed that when I call *Invoke *in ClientProxyImpl.java , the
headers are set from the OperationResourceInfo . After I implement the
failover retry strategy then when the method *retryInvoke * is called then
the previous headers which has Content-type and Accept is now changed to
have just Accept and omitting the Content-Type  and  hence throwing a null
pointer at
org.apache.cxf.jaxrs.client.ClientProxyImpl$BodyWriter.doWriteBody(ClientProxyImpl.java:801).

CODE SNIPPET.

  InputStream excelInputStream  =
TestUploadFileService.class.getResourceAsStream(TEST_FILE);
//            File spreadsheetURI = new File(url.toURI());
//            excelInputStream = new FileInputStream(spreadsheetURI);

             final ContentDisposition cd = new
ContentDisposition("attachment;filename=spreadsheet.xls");
             final Attachment att = new Attachment("file", excelInputStream,
cd);
             final Attachment spreadsheetType = new
Attachment("spreadsheetType", "text/plain", "SpreadJS");
             final List<Attachment> attachments = new
ArrayList<Attachment>();
             attachments.add(att);
             attachments.add(spreadsheetType);
             final MultipartBody multipartBody = new
MultipartBody(attachments);
             FailoverFeature feature = new FailoverFeature();
             List<String> alternateAddresses = new ArrayList<String>();

alternateAddresses.add("http://localhost:8084/SpreadsheetTransformationService";);

alternateAddresses.add("http://icdwdpvueweb-5:8080/SpreadsheetTransformationService";);


             RetryStrategy strategy = new RetryStrategy();
             strategy.setMaxNumberOfRetries(4);
             strategy.setAlternateAddresses(alternateAddresses);
             strategy.setDelayBetweenRetries(5000);
             feature.setStrategy(strategy);
             List<Feature> features = new ArrayList<Feature>();
             features.add(feature);
             List<String> prov = new ArrayList<String>();
             String spreadsheetTransformServiceUrl =
"http://localhost:8085/SpreadsheetTransformationService";;

             JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean();
             bean.setAddress(spreadsheetTransformServiceUrl);
             bean.setFeatures(features);
             bean.setResourceClass(SpreadSheetTransformService.class);
             WebClient  client1 = bean.createWebClient();

client1.back(true).path("http://localhost:8084/SpreadsheetTransformationService/import";);
             final SpreadSheetTransformService service1 =
bean.create(SpreadSheetTransformService.class);
             final Response response =
service1.transformToJSON(multipartBody);
             final InputStream jsonResponse = (InputStream)
response.getEntity();

setRequestHeaders is the method being called in invoke to set the content
type.

Idea regarding the retry is right but i think there is bug in forwarding the
headers from the first call to the retry alternate address on failure.

Appreciate your help.

Thanks,
Sree




--
View this message in context: 
http://cxf.547215.n5.nabble.com/Failover-for-JAX-RS-clients-tp4494783p5762219.html
Sent from the cxf-user mailing list archive at Nabble.com.



--
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Reply via email to