在基于 JAX-WS 的应用程序上启用 HTTP OPTIONS 方法
Enabling the HTTP OPTIONS method on a JAX-WS based application
我有一个简单的 JAX-WS 应用程序,它通过 SOAP-UI 运行良好,但是由于 JavaScript 中的 CORS 限制,此应用程序或我的网络服务器需要响应http OPTIONS 请求。
我四处搜索,但没有找到使用 JAX-WS 响应 OPTIONS 请求的解决方案。
正在使用的 Web 服务器是 Oracle WebLogic 12c。
请告知您是否遇到了变通方法,或者是否有另一个 java 库更适合使用。
谢谢
我相信您正在寻找@OPTIONS 注释,如何:
@OPTIONS
@PermitAll
public Response options() {
return Response.status(Response.Status.NO_CONTENT).build();
}
也请参阅 JAX-RS: OPTIONS for every Resource 以获得可能的答案
最终我们采用了以下方法.. JS 调用服务时效果很好。
@Path("/createCorrespondenceREST")
public class CreateCorrespondenceREST {
@OPTIONS
@PermitAll
public Response options() {
return Response.ok() //200
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Methods", "GET, OPTIONS")
.header("Access-Control-Allow-Headers", "Access-Control-Allow-Methods, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers")
.header("Access-Control-Request-Headers", "Access-Control-Allow-Origin, Content-Type")
.allow("OPTIONS").build();
}
@GET
@Produces("text/html")
public Response createCorrespondence(
@QueryParam("pSource") java.lang.String pSource,
@QueryParam("pTemplate") java.lang.String pTemplate,
@QueryParam("pSourceCode") java.lang.String pSourceCode,
@QueryParam("pSourceCodeType") java.lang.String pSourceCodeType,
@QueryParam("pSourceVersion") java.math.BigDecimal pSourceVersion,
@QueryParam("pRecipient") java.lang.String pRecipient,
@QueryParam("pLanguage") java.lang.String pLanguage,
@QueryParam("pSendDate") java.lang.String pSendDate,
@QueryParam("pBatchNo") java.math.BigDecimal pBatchNo,
@QueryParam("pHideDocument") java.lang.String pHideDocument,
@QueryParam("pExternalReference") java.lang.String pExternalReference,
@QueryParam("pInStr1") java.lang.String pInStr1,
@QueryParam("pInStr2") java.lang.String pInStr2,
@QueryParam("pInStr3") java.lang.String pInStr3,
@QueryParam("pInStr4") java.lang.String pInStr4,
@QueryParam("pInStr5") java.lang.String pInStr5,
@QueryParam("pInStr6") java.lang.String pInStr6,
@QueryParam("pInStr7") java.lang.String pInStr7,
@QueryParam("pInStr8") java.lang.String pInStr8,
@QueryParam("pInStr9") java.lang.String pInStr9,
@QueryParam("pInStr10") java.lang.String pInStr10,
@QueryParam("pInInt1") java.math.BigDecimal pInInt1,
@QueryParam("pInInt2") java.math.BigDecimal pInInt2,
@QueryParam("pInInt3") java.math.BigDecimal pInInt3,
@QueryParam("pInInt4") java.math.BigDecimal pInInt4,
@QueryParam("pInInt5") java.math.BigDecimal pInInt5,
@QueryParam("pInDate1") java.lang.String pInDate1,
@QueryParam("pInDate2") java.lang.String pInDate2,
@QueryParam("pInDate3") java.lang.String pInDate3,
@QueryParam("pInDate4") java.lang.String pInDate4,
@QueryParam("pInDate5") java.lang.String pInDate5
) {
try {
String pResponse = callLHHCorrDB.createCorrespondence(pSource,
pTemplate,
pSourceCode,
pSourceCodeType,
pSourceVersion,
pRecipient,
pLanguage,
vSendDate,
pBatchNo,
pHideDocument,
pExternalReference,
pInStr1,
pInStr2,
pInStr3,
pInStr4,
pInStr5,
pInStr6,
pInStr7,
pInStr8,
pInStr9,
pInStr10,
pInInt1,
pInInt2,
pInInt3,
pInInt4,
pInInt5,
vInDate1,
vInDate2,
vInDate3,
vInDate4,
vInDate5);
return Response.ok() //200
.entity(pResponse)
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Methods", "GET, OPTIONS")
.header("Access-Control-Allow-Headers", "Access-Control-Allow-Methods, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers")
.header("Access-Control-Request-Headers", "Access-Control-Allow-Origin, Content-Type")
.allow("OPTIONS").build();
} catch (Exception e) {
// TODO Auto-generated catch block
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos);
e.printStackTrace(ps);
ps.close();
return null;
}
}
}
感谢您的帮助。
我有一个简单的 JAX-WS 应用程序,它通过 SOAP-UI 运行良好,但是由于 JavaScript 中的 CORS 限制,此应用程序或我的网络服务器需要响应http OPTIONS 请求。
我四处搜索,但没有找到使用 JAX-WS 响应 OPTIONS 请求的解决方案。
正在使用的 Web 服务器是 Oracle WebLogic 12c。
请告知您是否遇到了变通方法,或者是否有另一个 java 库更适合使用。
谢谢
我相信您正在寻找@OPTIONS 注释,如何:
@OPTIONS
@PermitAll
public Response options() {
return Response.status(Response.Status.NO_CONTENT).build();
}
也请参阅 JAX-RS: OPTIONS for every Resource 以获得可能的答案
最终我们采用了以下方法.. JS 调用服务时效果很好。
@Path("/createCorrespondenceREST")
public class CreateCorrespondenceREST {
@OPTIONS
@PermitAll
public Response options() {
return Response.ok() //200
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Methods", "GET, OPTIONS")
.header("Access-Control-Allow-Headers", "Access-Control-Allow-Methods, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers")
.header("Access-Control-Request-Headers", "Access-Control-Allow-Origin, Content-Type")
.allow("OPTIONS").build();
}
@GET
@Produces("text/html")
public Response createCorrespondence(
@QueryParam("pSource") java.lang.String pSource,
@QueryParam("pTemplate") java.lang.String pTemplate,
@QueryParam("pSourceCode") java.lang.String pSourceCode,
@QueryParam("pSourceCodeType") java.lang.String pSourceCodeType,
@QueryParam("pSourceVersion") java.math.BigDecimal pSourceVersion,
@QueryParam("pRecipient") java.lang.String pRecipient,
@QueryParam("pLanguage") java.lang.String pLanguage,
@QueryParam("pSendDate") java.lang.String pSendDate,
@QueryParam("pBatchNo") java.math.BigDecimal pBatchNo,
@QueryParam("pHideDocument") java.lang.String pHideDocument,
@QueryParam("pExternalReference") java.lang.String pExternalReference,
@QueryParam("pInStr1") java.lang.String pInStr1,
@QueryParam("pInStr2") java.lang.String pInStr2,
@QueryParam("pInStr3") java.lang.String pInStr3,
@QueryParam("pInStr4") java.lang.String pInStr4,
@QueryParam("pInStr5") java.lang.String pInStr5,
@QueryParam("pInStr6") java.lang.String pInStr6,
@QueryParam("pInStr7") java.lang.String pInStr7,
@QueryParam("pInStr8") java.lang.String pInStr8,
@QueryParam("pInStr9") java.lang.String pInStr9,
@QueryParam("pInStr10") java.lang.String pInStr10,
@QueryParam("pInInt1") java.math.BigDecimal pInInt1,
@QueryParam("pInInt2") java.math.BigDecimal pInInt2,
@QueryParam("pInInt3") java.math.BigDecimal pInInt3,
@QueryParam("pInInt4") java.math.BigDecimal pInInt4,
@QueryParam("pInInt5") java.math.BigDecimal pInInt5,
@QueryParam("pInDate1") java.lang.String pInDate1,
@QueryParam("pInDate2") java.lang.String pInDate2,
@QueryParam("pInDate3") java.lang.String pInDate3,
@QueryParam("pInDate4") java.lang.String pInDate4,
@QueryParam("pInDate5") java.lang.String pInDate5
) {
try {
String pResponse = callLHHCorrDB.createCorrespondence(pSource,
pTemplate,
pSourceCode,
pSourceCodeType,
pSourceVersion,
pRecipient,
pLanguage,
vSendDate,
pBatchNo,
pHideDocument,
pExternalReference,
pInStr1,
pInStr2,
pInStr3,
pInStr4,
pInStr5,
pInStr6,
pInStr7,
pInStr8,
pInStr9,
pInStr10,
pInInt1,
pInInt2,
pInInt3,
pInInt4,
pInInt5,
vInDate1,
vInDate2,
vInDate3,
vInDate4,
vInDate5);
return Response.ok() //200
.entity(pResponse)
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Methods", "GET, OPTIONS")
.header("Access-Control-Allow-Headers", "Access-Control-Allow-Methods, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers")
.header("Access-Control-Request-Headers", "Access-Control-Allow-Origin, Content-Type")
.allow("OPTIONS").build();
} catch (Exception e) {
// TODO Auto-generated catch block
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos);
e.printStackTrace(ps);
ps.close();
return null;
}
}
}
感谢您的帮助。