Imagem com orientation errado depois do upload

Fala galera tudo bom?

Eu tenho uma pagina em jsf que tem onde eu faco o upload de uma imagem e mostro ela na pagina seguinte.
So que quando eu faco o upload pelo smartphone algumas fotos saem com o orientation errado.
Alguem tem alguma ideia do que pode ser?

                    UploadedFile upFile = getUploadFile();
		UploadedFile upFile2 = getUploadFile2();
		UploadedFile upFile3 = getUploadFile3();
		UploadedFile uparry[]={upFile,upFile2,upFile3};
		String ImgName1 = gencampDo.getPicName1();
		ImgName1 = ImgName1.replaceAll(",",",");
                   String ImgName2 = gencampDo.getPicName2();
		ImgName2 = ImgName2.replaceAll(",",",");

		String ImgName3 = gencampDo.getPicName3();
		ImgName3 = ImgName3.replaceAll(",",",");

		String imgarry[]={ImgName1,ImgName2,ImgName3};

		int k=1;
		String tempnmarry[] ={null,null,null};

		String currentDate ="";
		loop1:for(int i=0;i<uparry.length;i++){
			if(!(uparry[i]==null)){
				gencampDo.setUpFlg2(CWSConstant.CONSTANT1);
				Long ImgSize =uparry[i].getSize();
				if(ImgSize > 15728640){
					gencampDo.setUpFlg2(CWSConstant.CONSTANT1);
					sendCheckResult = false;
					break loop1;
				}
				String contentType=uparry[i].getContentType();
				String type= contentType.split("/")[0];
				if(!type.equals("image")){
					gencampDo.setUpFlg2(CWSConstant.CONSTANT1);
					sendCheckResult = false;
					break loop1;
				}
				currentDate = getCurrentDate();
				String filename=currentDate + "D"+k+ imgarry[i];
				filename=filename.replace(filename.substring(filename.lastIndexOf(".")+1), "jpeg");
				String UploadImgName =ImgPath+filename;
				FileOutputStream file = new FileOutputStream(UploadImgName);
				BufferedImage bi = ImageIO.read(uparry[i].getInputStream());
				
				ImageIO.write(bi, "JPEG", file);
				tempnmarry[i]=filename;
				k++;
				bi.flush();
				uparry[i].getInputStream().close();
	        	file.close();
			}else{
				continue;
			}
		}
		gencampDo.setTimeimg(currentDate);
		gencampDo.setTempName1(tempnmarry[0]);
		gencampDo.setTempName2(tempnmarry[1]);
		gencampDo.setTempName3(tempnmarry[2]);

Desde ja agradeco qualquer ajuda.

Abraco
Fabio