Próbuję utworzyć prostą wiadomość SOAP, aby wysłać ją od klienta, ale jestem (na pozór) nie mogę zmienić identyfikatora URI "mydlanej" przestrzeni nazw w kopercie.Nie można zmienić identyfikatora URI mydła w kopercie za pomocą java SoapMessage
To właśnie nagłówek mydło powinna wyglądać następująco:
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope/" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding/"> ... </soap:Envelope>
Więc mam następujący kod:
final SOAPMessage sm = MessageFactory.newInstance().createMessage();
final SOAPPart sp = sm.getSOAPPart();
final SOAPEnvelope se = sp.getEnvelope();
final SOAPHeader sh = se.getHeader();
final SOAPBody sb = se.getBody();
se.removeNamespaceDeclaration(se.getPrefix());
se.addNamespaceDeclaration("soap", "http://www.w3.org/2001/12/soap-envelope");
se.setPrefix("soap");
sb.setPrefix("soap");
sh.setPrefix("soap");
se.setEncodingStyle("http://www.w3.org/2001/12/soap-encoding/");
Kiedy jednak wydrukować wiadomość przed wysłaniem, oto moja koperta :
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding/">
Zauważ różnice w identyfikatorach URI xmlns: soap w sekcji "powinno być" i rzeczywiste.
Gdybym zmienić pierwszy argument addNamespaceDeclaration
wezwanie do „mydlany”, a nie „mydło”, to jest po koperta uzyskać:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapy="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding/">
Zgaduję, może to mieć coś wspólnego z fakt, że wywołanie to addNamespaceDeclaration
, a nie jak coś w rodzaju changeNamespaceDeclaration
, i jest ignorowane, biorąc pod uwagę, że przestrzeń nazw już istnieje, ale nie mogę znaleźć czegoś, co działa (próbowałem już setAttributeNS
).
EDYCJA: Właśnie zdałem sobie sprawę, że setAttributeNS
jest głupie, ponieważ zmienia to przestrzeń nazw, a nie URI. EDYCJA PONOWNIE: Jestem trochę zdezorientowany, ponieważ wciąż szukam, czasami widzę, że nazwa sięga soap:"Namespace"
, więc w tym sensie chcę zmienić przestrzeń nazw ... ale myślałem, że przestrzeń nazw była częścią "mydła" . Jakiekolwiek wyjaśnienia?
To jest mój pierwszy wpis, więc przepraszam, jeśli pytam o coś, co już zostało rozwiązane, ale przeszukałem i większość z tego, co znalazłem, jest związana ze zmianą przestrzeni nazw (jak z SOAP-ENV , która jest domyślną przestrzenią nazw, do mydła), a nie sam URI. Z góry dziękuję.
-M
Dzięki za szybka odpowiedź erik, jednak próbowałem to około 5 minut przed twoją pocztą i zobaczyłem, że domyślna przestrzeń nazw zmieniła się z "SOAP-ENV" (który zamieniłem na "mydło") na "env": ' \t ... env: Envelo pe> ' Naprawdę potrzebuję koperty, aby dopasować to, co pierwotnie napisałem - jakieś inne sugestie? Może po prostu muszę zbudować wiadomość, ponieważ wydaje się, że oba protokoły obsługiwane przez MessageFactory nie są całkiem słuszne ... –
MandM
Prefiks (np. 'Env' lub' soap') nie ma znaczenia semantycznego, jest tylko skrótem do odniesienia przestrzeń nazw (np. 'http: // www.w3.org/2003/05/soap-envelope'). – erikxiv
Dobrze wiedzieć, ale uważam, że urządzenie, z którym się komunikuję, wymaga, aby te pola były w ten sposób w żądaniu (chyba). – MandM