JAXB : 모든 요소에 네임스페이스 접두사 필요
저는 JAXB를 사용하여 요청 XML을 생성하는 웹 서비스 호출을 위해 Spring WebServiceTemplate를 사용하고 있습니다. SOAP 요청에 네임스페이스 접두사(단일 네임스페이스만 있음)가 있어야 하는 모든 요소(루트 포함)가 필요합니다.
예:
<ns1:Login xmlns:ns1="www.example.com/a">
<ns1:username>abc</ns1:username>
<ns1:password>abc</ns1:password>
</ns1:Login>
하지만 나는.
<Login xmlns="www.example.com/a">
<username>abc<username>
<password>abc<password>
</Login>
xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="www.example.com/a" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ilreq="www.example.com/a" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:complexType name="Login">
<xs:sequence>
<xs:element name="username" type="xs:string"/>
<xs:element name="password" type="xs:string"/>
</xs:sequence>
</xs:complexType>
XSD에서 생성된 Java 클래스
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Login", propOrder = {
"username",
"password"
})
@XmlRootElement
public class Login {
@XmlElement(required = true)
protected String username;
@XmlElement(required = true)
protected String password;
......
}
package-info
@javax.xml.bind.annotation.XmlSchema(
namespace = "www.example.com/a",
elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package authenticator.beans.login;
루트를 포함한 모든 요소에 네임스페이스 접두사를 사용하여 요청 XML을 생성하는 방법을 알고 싶습니다.
추가하여 해결합니다.
@XmlSchema(
namespace = "http://www.example.com/a",
elementFormDefault = XmlNsForm.QUALIFIED,
xmlns = {
@XmlNs(prefix="ns1", namespaceURI="http://www.example.com/a")
}
)
package authenticator.beans.login;
import javax.xml.bind.annotation.*;
package-info로
jaxb-name spaces의 도움을 받았습니다-실종 : Blaise Douan에서 제공하는 답변
MSK,
회원 변수에 네임스페이스 선언을 이렇게 설정해보셨나요?:
@XmlElement(required = true, namespace = "http://example.com/a")
protected String username;
@XmlElement(required = true, namespace = "http://example.com/a")
protected String password;
우리 프로젝트의 경우 네임스페이스 문제를 해결했습니다.NameSpace PrefixMapper도 만들어야 했습니다.
이 문제에 직면하고 있었습니다. 패키지에 package-info를 추가하여 해결했습니다.
그리고 그 안에 있는 다음의 코드:
@XmlSchema(
namespace = "http://www.w3schools.com/xml/",
elementFormDefault = XmlNsForm.QUALIFIED,
xmlns = {
@XmlNs(prefix="", namespaceURI="http://www.w3schools.com/xml/")
}
)
package com.gateway.ws.outbound.bean;
import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;
접두사를 제공할 네임스페이스를 둘 이상 지정하려면 다음과 같은 방법을 사용합니다.
@javax.xml.bind.annotation.XmlSchema(
namespace = "urn:oecd:ties:cbc:v1",
elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED,
xmlns ={@XmlNs(prefix="cbc", namespaceURI="urn:oecd:ties:cbc:v1"),
@XmlNs(prefix="iso", namespaceURI="urn:oecd:ties:isocbctypes:v1"),
@XmlNs(prefix="stf", namespaceURI="urn:oecd:ties:stf:v4")})
... package-info로
다른 방법은 마샬러에게 항상 특정 접두사를 사용하라고 말하는 것입니다.
marshaller.setProperty("com.sun.xml.bind.namespacePrefixMapper", new NamespacePrefixMapper() {
@Override
public String getPreferredPrefix(String arg0, String arg1, boolean arg2) {
return "ns1";
}
});'
marshaller.setProperty
선의 JAX-B 마샬러에서만 작동합니다.그 질문은 JAX-B 마샬러에 관한 것이었습니다.SpringSource
, 지원하지 않는setProperty
.
언급URL : https://stackoverflow.com/questions/6895486/jaxb-need-namespace-prefix-to-all-the-elements
'it-source' 카테고리의 다른 글
Revolution Slider에서 이전 URL을 새 URL로 교체해야 함 (0) | 2023.10.13 |
---|---|
식별자(id)에 대한 와일드카드 선택기가 있습니까? (0) | 2023.10.08 |
기본값으로 주식을 관리하도록 우커머스 가져오기 (0) | 2023.10.08 |
고유 인덱스가 열 검색 성능에 더 좋습니까? (PGSQL & MySQL) (0) | 2023.10.08 |
파워셸에서 내장된 별칭을 제거하거나 교체하려면 어떻게 해야 합니까? (0) | 2023.10.08 |