Java 如何使用cxf消息创建和发送apache cxf SoapMessage?
我正在使用IntellijIDEA,我有一个测试SOAP WS的项目。我有用于发送的xml和msg文件。如何将此文件强制转换为cxf消息和cxf SoapMessage以进行发送?这是我的方法,它返回SoapMessage:Java 如何使用cxf消息创建和发送apache cxf SoapMessage?,java,spring,apache,web-services,cxf,Java,Spring,Apache,Web Services,Cxf,我正在使用IntellijIDEA,我有一个测试SOAP WS的项目。我有用于发送的xml和msg文件。如何将此文件强制转换为cxf消息和cxf SoapMessage以进行发送?这是我的方法,它返回SoapMessage: public SoapMessage getMessage(File file) throws Exception{ Message msg; msg.setContent(File.class, file); SoapMessage message = new So
public SoapMessage getMessage(File file) throws Exception{
Message msg;
msg.setContent(File.class, file);
SoapMessage message = new SoapMessage(msg);
return message;
}
但如果我尝试调用此方法,我会看到:
java.lang.NullPointerException
我尝试发送此消息:
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
schemaLocation="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<Test>
<msg>Test</msg>
</Test>
</soapenv:Body>
</soapenv:Envelope>
它用于将my*.msg文件强制转换为SoapMessage并将其发送到SOAPWS中,您可以通过两种方式测试基于SOAP的web服务
我们不需要手动构造SOAP消息。我需要做一些类似的工作,下面是我所做的:
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import java.util.List;
import org.apache.cxf.binding.soap.Soap12;
import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.headers.Header;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.BlockJUnit4ClassRunner;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
@RunWith(BlockJUnit4ClassRunner.class)
public class SOAPMessageTest {
@Test
public void emptyHeaderTest() {
SoapMessage soapMessage = new SoapMessage(Soap12.getInstance());
List<Header> headers = soapMessage.getHeaders();
assertThat(headers.size(), is(0));
}
}
import static org.hamcrest.CoreMatchers.is;
导入静态org.junit.Assert.assertThat;
导入java.util.List;
导入org.apache.cxf.binding.soap.Soap12;
导入org.apache.cxf.binding.soap.SoapMessage;
导入org.apache.cxf.headers.Header;
导入org.junit.Before;
导入org.junit.Test;
导入org.junit.runner.RunWith;
导入org.junit.runners.BlockJUnit4ClassRunner;
导入org.w3c.dom.Element;
导入org.w3c.dom.Node;
@RunWith(BlockJUnit4ClassRunner.class)
公共类SOAPMessageTest{
@试验
public void emptyHeaderTest(){
SoapMessage SoapMessage=新的SoapMessage(Soap12.getInstance());
List headers=soapMessage.getHeaders();
断言(headers.size(),为(0));
}
}
根据需要调整此代码以将内容添加到
soapMessage
对象。是否尝试像这样实例化soapMessage
Reader reader = new StringReader(body);
XMLStreamReader xmlReader = null;
XMLInputFactory factory = XMLInputFactory.newInstance(); // Or newFactory()
try {
xmlReader = factory.createXMLStreamReader(reader);
} catch (XMLStreamException e) {
e.printStackTrace();
}
SoapMessage soapMessage = new SoapMessage(Soap11.getInstance());
soapMessage.setContent(XMLStreamReader.class, xmlReader);
看看你的代码。您需要初始化msg。@rghome初始化msg的正确性如何?非常感谢您的回复,但我需要根据需求规范使用cxf消息和cxf SoapMessage
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import java.util.List;
import org.apache.cxf.binding.soap.Soap12;
import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.headers.Header;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.BlockJUnit4ClassRunner;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
@RunWith(BlockJUnit4ClassRunner.class)
public class SOAPMessageTest {
@Test
public void emptyHeaderTest() {
SoapMessage soapMessage = new SoapMessage(Soap12.getInstance());
List<Header> headers = soapMessage.getHeaders();
assertThat(headers.size(), is(0));
}
}
Reader reader = new StringReader(body);
XMLStreamReader xmlReader = null;
XMLInputFactory factory = XMLInputFactory.newInstance(); // Or newFactory()
try {
xmlReader = factory.createXMLStreamReader(reader);
} catch (XMLStreamException e) {
e.printStackTrace();
}
SoapMessage soapMessage = new SoapMessage(Soap11.getInstance());
soapMessage.setContent(XMLStreamReader.class, xmlReader);