0
Java에서 JAX-WS 웹 메서드를 사용하려고합니다. 그리고 몇 가지 디자인 문제가 발생합니다. 웹 서비스 메서드에서 생성 된 XML 구조를 변경하려고합니다. 아래에는 일부 코드 부분이 나와 있습니다. 나는 내가 원하는 것을 물을 수 있기를 바란다.JAX-WS 웹 메서드 추가 태그 방지 방법
아래와 같이 테스트 Java 클래스를 만듭니다.
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"testKod"
})
@XmlRootElement(name = "testService")
public class TestService {
@XmlElement(required = true)
protected String testKod;
@XmlAttribute(required = true)
protected String uyeKod;
@XmlAttribute(required = true)
protected String islemRefNo;
...
}
그리고 웹 서비스와 메소드를 구현합니다.
@WebMethod(operationName = "testService")
@WebResult(name="testServiceResponse")
public TestServiceResponse testService(@WebParam(name = "params") TestService params){
TestServiceResponse response = new TestServiceResponse();
try {
response.setUyeKod(params.getUyeKod());
response.setIslemRefNo(params.getIslemRefNo());
response.setTestKod(params.getTestKod());
} catch (Exception e) {
response.getHata().setAciklama(Convert.fromDBtoTR(TExceptionUtil.getExceptionMessage(e)));
response.getHata().setHataKodu("100");
}
return response;
}
SAOP-UI로 테스트하고 xsd를 엑스포트하면 클라이언트 요청이 아래에 표시됩니다.
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.ddd.ccc.bbb.aaa.com/">
<soapenv:Header/>
<soapenv:Body>
<ws:testService>
<params islemRefNo="1212" uyeKod="XXX" >
<testKod>1212</testKod>
</params>
</ws:testService>
</soapenv:Body>
</soapenv:Envelope>
하지만 PARAMS 태그를보고 싶지 않다, 나는 간단히
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.ddd.ccc.bbb.aaa.com/">
<soapenv:Header/>
<soapenv:Body>
<ws:testService islemRefNo="1212" uyeKod="XXX" >
<testKod>1212</testKod>
</ws:testService>
</soapenv:Body>
</soapenv:Envelope>
아래에있는 내 XSD 아래와 같은처럼보고 싶어;
<xs:complexType name="testService">
<xs:sequence>
<xs:element name="params" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="testKod" type="xs:string"/>
</xs:sequence>
<xs:attribute name="uyeKod" type="xs:string" use="required"/>
<xs:attribute name="islemRefNo" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
하지만 그 모양을하고 싶습니다. 또한 나는 응답 XML에서 동일한 문제에 직면했다.
<xs:element name="testService">
<xs:complexType>
<xs:sequence>
<xs:element name="testKod" type="xs:string"/>
</xs:sequence>
<xs:attribute name="uyeKod" type="xs:string" use="required"/>
<xs:attribute name="islemRefNo" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>