这是我正在进行的操作。我生成了WSDL,并获得了CreateOrderRequestType.java
但是当我解组时,它正在寻找CreateOrder。
如何获得CreateOrder类。
@WebMethod(operationName = "CreateOrder", action = "http://xmlns.oracle.com/communications/ordermanagement/CreateOrder")
@WebResult(name = "CreateOrderResponse", targetNamespace = "http://xmlns.oracle.com/communications/ordermanagement", partName = "CreateOrderResponse")
public CreateOrderResponseType createOrder(
@WebParam(name = "CreateOrder", targetNamespace = "http://xmlns.oracle.com/communications/ordermanagement", partName = "CreateOrderRequest")
CreateOrderRequestType createOrderRequest)
throws CreateOrderFaultMsg, CreateOrderFaultMsg1, CreateOrderFaultMsg3
;
public static CreateOrderRequestType convertXmlStringToJavaObject(String xmlString) {
JAXBContext jaxbContext;
try {
jaxbContext = JAXBContext.newInstance(CreateOrderRequestType.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
StringReader reader = new StringReader(xmlString);
CreateOrderRequestType msg = (CreateOrderRequestType) unmarshaller.unmarshal(reader);
return msg;
} catch (JAXBException e) {
throw new OSMException("Unable to Convert XML String to Java Objects " + e.getMessage(), e);
}
}
public CreateOrderResponseType createAncillariesBySoloOrderId(String soloOrderId) {
String message = findOrderBySoloOrderId(soloOrderId);
//CreateOrderRequestType createOrderRequestType = null;
message = "<CreateOrder xmlns=\"http://xmlns.oracle.com/communications/ordermanagement\">"
+ message
+ "</CreateOrder>";
log.info("message before converting to Java Object = " + message);
CreateOrderRequestType createOrderRequestType = com.spectrum.order.util.OrderUtil.convertXmlStringToJavaObject(message);
log.info("Msg Object = " + createOrderRequestType.toString());
return osmClient.createOrder(createOrderRequestType);
}
My xmlString
<CreateOrder xmlns="http://xmlns.oracle.com/communications/ordermanagement">
<msg xmlns=""><head><Client>Charter</Client><Routing>8260|1700|0090</Routing></head></msg>
</CreateOrder>
最佳答案
似乎在解组期间将返回JAXBElement的实例。您可以检查返回的类型并适当地处理它:
Object obj = unmarshaller.unmarshal(reader);
CreateOrderRequestType msg = null;
if (obj instanceof CreateOrderRequestType) {
msg = (CreateOrderRequestType) obj;
}
if (obj instanceof JAXBElement) {
msg = ((JAXBElement<CreateOrderRequestType>) obj).getValue();
}
if (msg == null) {
throw new OSMException("Unable to Convert XML String to Java Objects ");
}
顺便说一句,最好将变量
JAXBContext jaxbContext;
设置为类变量,并且不要在服务调用期间而是在构造函数或某种初始化方法中初始化它,因为JAXBContext的初始化是耗时的操作,通常应发生一次。 JAXBContext是线程安全的,并且使其成为类变量应该不会影响服务功能。