Spring MVC - " IllegalArgumentException:对象引用未设置为对象的实例"何时获得SOAP响应

时间:2015-04-10 03:05:07

标签: java spring spring-mvc soap

我是Spring MVC的初学者。我想从SOAP Web服务获得响应。但是我收到了一条错误消息。

Error Message

这是我的源代码。

private static final String GET_DOCUMENT_SOAP_ACTION = "apvx:bus:ReportGenerator:{1D81BEDF-3894-45b2-99C9-95E50B1B9494}/Document_Get";

    @Autowired
    protected PathCentralWSTemplateFactory webServiceTemplateFactory;

    public DocumentGetResponse documentGet(DocumentGet request) {
        try {
            return (DocumentGetResponse) webServiceTemplateFactory.getClient().marshalSendAndReceive(request,
                    getCallback(GET_DOCUMENT_SOAP_ACTION));
        } catch (Exception e) {
            throw new IllegalArgumentException(e);
        }
    }

PathCentralWSTemplateFactoryImpl

public PathCentralWSTemplateFactoryImpl() throws SOAPException {
        marshaller = new Jaxb2Marshaller();
        messageFactory = new SaajSoapMessageFactory();
        MessageFactory obj =  MessageFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL);
        if(obj != null){
            ((SaajSoapMessageFactory) messageFactory).setMessageFactory(obj);   
        }
        ((SaajSoapMessageFactory) messageFactory).setSoapVersion(org.springframework.ws.soap.SoapVersion.SOAP_11);
        url = "https://www.mypathcentral.net/...";

    }

@Override
    public WebServiceTemplate getClient() {
        WebServiceTemplate webServiceTemplate = new WebServiceTemplate(messageFactory);
        webServiceTemplate.setMarshaller(marshaller);
        webServiceTemplate.setUnmarshaller((Unmarshaller) marshaller);
        webServiceTemplate.setDefaultUri(url);
        webServiceTemplate.setMessageSender(getMessageSender());
        return webServiceTemplate;
    }

1 个答案:

答案 0 :(得分:0)

我不熟悉您在此处所遇到的框架,但我知道您的代码有什么问题。您收到一条消息,指出没有对象引用。我相信这是因为您将GET_DOCUMENT_SOAP_ACTION声明为静态final。 static关键字使系统在堆外部分配与任何对象分开的静态内存。我认为如果你将字符串声明为标准对象,这可能会解决这个问题,但我不确定这是否会导致代码的其余部分出现问题。