Axis2/Java (1.6.2) を Tomcat (8.0.5) Webapp としてインストールしました。
2 つのサービス (HelloWorld と単純な電卓) を開発しましたが、正常に動作します。
ここで、外部 XML から情報を読み取る 1 つのメソッドを使用してサービスを開発しようとしています。
このファイルは、「$CATALINA_HOME/webapps/axis2/myService/」ディレクトリにあります。
Ant を使用して .aar アーカイブをコンパイルします。
このメソッドをURLで呼び出すと
http://127.0.0.1:8080/axis2/services/InventoryCheck/doCheck?args0=12&args1=9
私は受け取ります:
<soapenv:Reason xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
<soapenv:Text xml:lang="en-US">URI cannot be null</soapenv:Text>
</soapenv:Reason>
Tomcat 7 でこの同じサービスを試してみましたが、問題なく動作します。
どうすれば解決できますか?
ありがとう
これはサービス Java クラスです。
public class InventoryCheckService {
private String path = "myService/products.xml";
public boolean doCheck(String sku, int quantity){
MessageContext msgContext = MessageContext.getCurrentMessageContext();
ServletContext servletContext = (ServletContext) msgContext.getProperty(HTTPConstants.MC_HTTP_SERVLETCONTEXT);
String realPath = servletContext.getRealPath(path);
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
Document doc = null;
try {
DocumentBuilder builder = factory.newDocumentBuilder();
doc = builder.parse(realPath);
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ReaderXML reader = new ReaderXML(doc);
Product product = reader.getBySku(sku);
return (product != null) && (product.getQuantity() >= quantity);
}
}
文字列 realPath を products.xml ファイルの絶対パスとして定義すると、正常に動作します。したがって、問題は次の 3 行にあります。
MessageContext msgContext = MessageContext.getCurrentMessageContext();
ServletContext servletContext = (ServletContext) msgContext.getProperty(HTTPConstants.MC_HTTP_SERVLETCONTEXT);
String realPath = servletContext.getRealPath(path);
オブジェクト ReaderXML および Product を定義する 2 つの単純な Java クラスもあります。
これは services.xml ファイルです。
<service name="InventoryCheck">
<description>
Webservice Inventory Check
</description>
<messageReceivers>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
</messageReceivers>
<parameter name="ServiceClass">com.myService.service.InventoryCheckService</parameter>
</service>