@Override public IBaseOperationOutcome invokeClient(String theResponseMimeType, InputStream theResponseInputStream, int theResponseStatusCode, Map<String, List<String>> theHeaders) throws BaseServerResponseException { EncodingEnum respType = EncodingEnum.forContentType(theResponseMimeType); if (respType == null) { return null; } IParser parser = respType.newParser(myContext); IBaseOperationOutcome retVal; try { // TODO: handle if something else than OO comes back retVal = (IBaseOperationOutcome) parser.parseResource(theResponseInputStream); } catch (DataFormatException e) { ourLog.warn("Failed to parse OperationOutcome response", e); return null; } MethodUtil.parseClientRequestResourceHeaders(null, theHeaders, retVal); return retVal; } }
protected IBaseResource parseResourceBody(String theResourceBody) { EncodingEnum encoding = EncodingEnum.detectEncodingNoDefault(theResourceBody); if (encoding == null) { throw new IllegalArgumentException(myContext.getLocalizer().getMessage(GenericClient.class, "cantDetermineRequestType")); } return encoding.newParser(myContext).parseResource(theResourceBody); }
public String getResourceContentType() { if (Boolean.TRUE.equals(isNonLegacy())) { return getEncoding().getResourceContentTypeNonLegacy(); } return getEncoding().getResourceContentType(); }
private static ResponseEncoding getEncodingForContentType(FhirContext theFhirContext, boolean theStrict, String theContentType, String thePreferContentType) { EncodingEnum encoding; if (theStrict) { encoding = EncodingEnum.forContentTypeStrict(theContentType); } else { encoding = EncodingEnum.forContentType(theContentType); } if (isNotBlank(thePreferContentType)) { if (thePreferContentType.equals(theContentType)) { return new ResponseEncoding(theFhirContext, encoding, theContentType); } } if (encoding == null) { return null; } return new ResponseEncoding(theFhirContext, encoding, theContentType); }
public Object returnResponse(ServletRequestDetails theRequest, ParseAction<?> outcome, int operationStatus, boolean allowPrefer, MethodOutcome response, String resourceName) throws IOException { HttpServletResponse servletResponse = theRequest.getServletResponse(); servletResponse.setStatus(operationStatus); servletResponse.setCharacterEncoding(Constants.CHARSET_NAME_UTF8); addHeadersToResponse(servletResponse); if (allowPrefer) { addContentLocationHeaders(theRequest, servletResponse, response, resourceName); } Writer writer; if (outcome != null) { ResponseEncoding encoding = RestfulServerUtils.determineResponseEncodingWithDefault(theRequest); servletResponse.setContentType(encoding.getResourceContentType()); writer = servletResponse.getWriter(); IParser parser = encoding.getEncoding().newParser(getFhirContext()); parser.setPrettyPrint(RestfulServerUtils.prettyPrintResponse(this, theRequest)); outcome.execute(parser, writer); } else { servletResponse.setContentType(Constants.CT_TEXT_WITH_UTF8); writer = servletResponse.getWriter(); } return writer; }
return null; encoding = EncodingEnum.detectEncodingNoDefault(body); if (encoding == null) { String msg = ctx.getLocalizer().getMessage(ResourceParameter.class, "noContentTypeInRequest", restOperationType); IParser parser = encoding.newParser(ctx); parser.setServerBaseUrl(theRequest.getFhirServerBase()); T retVal; String msg = ctx.getLocalizer().getMessage(ResourceParameter.class, "failedToParseRequest", encoding.name(), e.getMessage()); throw new InvalidRequestException(msg);
private static ResponseEncoding determineRequestEncodingNoDefaultReturnRE(RequestDetails theReq) { ResponseEncoding retVal = null; List<String> headers = theReq.getHeaders(Constants.HEADER_CONTENT_TYPE); if (headers != null) { Iterator<String> acceptValues = headers.iterator(); if (acceptValues != null) { while (acceptValues.hasNext() && retVal == null) { String nextAcceptHeaderValue = acceptValues.next(); if (nextAcceptHeaderValue != null && isNotBlank(nextAcceptHeaderValue)) { for (String nextPart : nextAcceptHeaderValue.split(",")) { int scIdx = nextPart.indexOf(';'); if (scIdx == 0) { continue; } if (scIdx != -1) { nextPart = nextPart.substring(0, scIdx); } nextPart = nextPart.trim(); EncodingEnum encoding = EncodingEnum.forContentType(nextPart); if (encoding != null) { retVal = new ResponseEncoding(theReq.getServer().getFhirContext(), encoding, nextPart); break; } } } } } } return retVal; }
@Override public IPatchWithBody withBody(String thePatchBody) { Validate.notBlank(thePatchBody, "thePatchBody must not be blank"); myPatchBody = thePatchBody; EncodingEnum encoding = EncodingEnum.detectEncodingNoDefault(thePatchBody); if (encoding == EncodingEnum.XML) { myPatchType = PatchTypeEnum.XML_PATCH; } else if (encoding == EncodingEnum.JSON) { myPatchType = PatchTypeEnum.JSON_PATCH; } else { throw new IllegalArgumentException("Unable to determine encoding of patch"); } return this; }
IParser parser = EncodingEnum.detectEncoding(inputString).newParser(myCtx); IBaseResource input = parser.parseResource(inputString);
ResponseEncoding encoding = RestfulServerUtils.determineResponseEncodingNoDefault(myRequestDetails, myRequestDetails.getServer().getDefaultResponseEncoding()); if (encoding != null) { return encoding.getEncoding().name(); EncodingEnum encoding = EncodingEnum.forContentType(contentType); if (encoding != null) { byte[] requestContents = myRequestDetails.loadRequestContents();
if (isNotBlank(binary.getContentType()) && EncodingEnum.forContentTypeStrict(binary.getContentType()) == null) { return httpClient.createBinaryRequest(getContext(), binary); encoding = EncodingEnum.detectEncoding(myContents);
@Override public void marshal(Exchange exchange, Object o, OutputStream outputStream) throws Exception { IBaseResource iBaseResource; if (!(o instanceof IBaseResource)) { iBaseResource = exchange.getContext().getTypeConverter().mandatoryConvertTo(IBaseResource.class, exchange, o); } else { iBaseResource = (IBaseResource) o; } IParser parser = getFhirContext().newXmlParser(); configureParser(parser); parser.encodeResourceToWriter(iBaseResource, new OutputStreamWriter(outputStream)); if (isContentTypeHeader()) { exchange.getMessage().setHeader(Exchange.CONTENT_TYPE, parser.getEncoding().getResourceContentTypeNonLegacy()); } }
public static IBaseResource parseResourceFromRequest(RequestDetails theRequest, BaseMethodBinding<?> theMethodBinding, Class<? extends IBaseResource> theResourceType) { IBaseResource retVal = null; if (theResourceType != null && IBaseBinary.class.isAssignableFrom(theResourceType)) { String ct = theRequest.getHeader(Constants.HEADER_CONTENT_TYPE); if (EncodingEnum.forContentTypeStrict(ct) == null) { FhirContext ctx = theRequest.getServer().getFhirContext(); IBaseBinary binary = BinaryUtil.newBinary(ctx); binary.setId(theRequest.getId()); binary.setContentType(ct); binary.setContent(theRequest.loadRequestContents()); retVal = binary; /* * Security context header, which is only in * DSTU3+ */ if (ctx.getVersion().getVersion().isEqualOrNewerThan(FhirVersionEnum.DSTU3)) { String securityContext = theRequest.getHeader(Constants.HEADER_X_SECURITY_CONTEXT); if (isNotBlank(securityContext)) { BinaryUtil.setSecurityContext(ctx, binary, securityContext); } } } } if (retVal == null) { retVal = loadResourceFromRequest(theRequest, theMethodBinding, theResourceType); } return retVal; }
} else { EncodingEnum defaultResponseEncoding = theRequestDetails.getServer().getDefaultResponseEncoding(); p = defaultResponseEncoding.newParser(theRequestDetails.getServer().getFhirContext()); RestfulServerUtils.configureResponseParser(theRequestDetails, p);
return null; encoding = EncodingEnum.detectEncodingNoDefault(body); if (encoding == null) { String msg = ctx.getLocalizer().getMessage(ResourceParameter.class, "noContentTypeInRequest", restOperationType); IParser parser = encoding.newParser(ctx); parser.setServerBaseUrl(theRequest.getFhirServerBase()); T retVal; String msg = ctx.getLocalizer().getMessage(ResourceParameter.class, "failedToParseRequest", encoding.name(), e.getMessage()); throw new InvalidRequestException(msg);
@Override public IBaseResource invokeClient(String theResponseMimeType, InputStream theResponseInputStream, int theResponseStatusCode, Map<String, List<String>> theHeaders) throws BaseServerResponseException { /* * For operation responses, if the response content type is a FHIR content-type * (which is will probably almost always be) we just handle it normally. However, * if we get back a successful (2xx) response from an operation, and the content * type is something other than FHIR, we'll return it as a Binary wrapped in * a Parameters resource. */ EncodingEnum respType = EncodingEnum.forContentType(theResponseMimeType); if (respType != null || theResponseStatusCode < 200 || theResponseStatusCode >= 300) { return super.invokeClient(theResponseMimeType, theResponseInputStream, theResponseStatusCode, theHeaders); } // Create a Binary resource to return IBaseBinary responseBinary = BinaryUtil.newBinary(getFhirContext()); // Fetch the content type String contentType = null; List<String> contentTypeHeaders = theHeaders.get(Constants.HEADER_CONTENT_TYPE_LC); if (contentTypeHeaders != null && contentTypeHeaders.size() > 0) { contentType = contentTypeHeaders.get(0); } responseBinary.setContentType(contentType); // Fetch the content itself try { responseBinary.setContent(IOUtils.toByteArray(theResponseInputStream)); } catch (IOException e) { throw new InternalErrorException("IO failure parsing response", e); } return responseBinary; }
public static EncodingEnum detectEncoding(String theBody) { EncodingEnum retVal = detectEncodingNoDefault(theBody); retVal = ObjectUtils.defaultIfNull(retVal, EncodingEnum.XML); return retVal; }
private static ResponseEncoding getEncodingForContentType(FhirContext theFhirContext, boolean theStrict, String theContentType, String thePreferContentType) { EncodingEnum encoding; if (theStrict) { encoding = EncodingEnum.forContentTypeStrict(theContentType); } else { encoding = EncodingEnum.forContentType(theContentType); } if (isNotBlank(thePreferContentType)) { if (thePreferContentType.equals(theContentType)) { return new ResponseEncoding(theFhirContext, encoding, theContentType); } } if (encoding == null) { return null; } return new ResponseEncoding(theFhirContext, encoding, theContentType); }
ResponseEncoding encoding = RestfulServerUtils.determineResponseEncodingNoDefault(myRequestDetails, myRequestDetails.getServer().getDefaultResponseEncoding()); if (encoding != null) { return encoding.getEncoding().name(); EncodingEnum encoding = EncodingEnum.forContentType(contentType); if (encoding != null) { byte[] requestContents = myRequestDetails.loadRequestContents();
if (isNotBlank(binary.getContentType()) && EncodingEnum.forContentTypeStrict(binary.getContentType()) == null) { return httpClient.createBinaryRequest(getContext(), binary); encoding = EncodingEnum.detectEncoding(myContents);