Как десериализовать SOAP?

Пытаюсь развернуть SOAP в GO структуру, ошибку не возвращает, но поле status остается пустым. Что я делаю не так?
package main

import (
	"fmt"
	"encoding/xml"
)

type myEnvelope struct {
	XMLName xml.Name `xml:"Envelope"`
	Body    methodResponseData
}

type methodResponseData struct {
	XMLName xml.Name
	Status  string `xml:"responseData>status"`
}

func main() {
	resp := methodResponseData{}
	resp.XMLName.Local = "SOAP-ENV:methodResponse"

	envelope := myEnvelope{
		Body: resp,
	}
	envelope.XMLName.Local = "Envelope"
	envelope.Body.XMLName.Local = "Body"

	raw := []byte(`
			<?xml version="1.0" encoding="UTF-8"?>
			<SOAP-ENV:Envelope> 
    				<SOAP-ENV:Body> 
        				<SOAP-ENV:methodResponse> 
            					<responseData> 
                					<status>OK</status> 
            					</responseData> 
        				</SOAP-ENV:methodResponse> 
    				</SOAP-ENV:Body> 
			</SOAP-ENV:Envelope>
	`)
	err := xml.Unmarshal(raw, &envelope)
	if err != nil {
		fmt.Printf("something wrong %s", err)
	}
	fmt.Printf("%s", envelope.Body.Status)
}
  • Вопрос задан
  • 167 просмотров
Пригласить эксперта
Ответы на вопрос 2
ScriptKiddo
@ScriptKiddo
Не шарю в Go совсем, так что может выглядеть странно

package main

import (
	"fmt"
	"encoding/xml"
)

type Body struct {
	XMLName xml.Name
	Status  string `xml:"methodResponse>responseData>status"`
}

type Envelope struct {
	XMLName xml.Name
	Body    Body `xml:"Body"`
}

func main() {

	var envelope Envelope

	raw := []byte(`
      <?xml version="1.0" encoding="UTF-8"?>
      <SOAP-ENV:Envelope> 
    				<SOAP-ENV:Body> 
        				<SOAP-ENV:methodResponse> 
            					<responseData> 
                					<status>OK</status> 
            					</responseData> 
        				</SOAP-ENV:methodResponse> 
    				</SOAP-ENV:Body> 
      </SOAP-ENV:Envelope>
  `)
	err := xml.Unmarshal(raw, &envelope)
	if err != nil {
		fmt.Printf("something wrong %s", err)
	}
	fmt.Printf("Status: %s", envelope.Body.Status)
}


OUT
Status: OK
Process finished with exit code 0
Ответ написан
Комментировать
@MadridianFox
Web-программист, многостаночник
Не изобретайте велосипед и найдите библиотеку для работы с soap. Протоколы для того и придумываются, чтобы стандартизировать какие-то вещи и потом использовать библиотеки.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы